Compare commits
14 Commits
Author | SHA1 | Date |
---|---|---|
Lucas Pleß | c0cd519a4f | |
Lucas Pleß | 892a7e6905 | |
Lucas Ple | 8c363fbf64 | |
Lucas Pleß | f98ab7c225 | |
Lucas Pleß | 6b41c9cb92 | |
Lucas Pleß | 0c356f3bdb | |
Lucas Pleß | 2c7694036d | |
Lucas Pleß | a5329a0bcc | |
Lucas Pleß | ed69f6a0e3 | |
Lucas Pleß | 4f288256e8 | |
Lucas Pleß | 41bfcd33c3 | |
Lucas Pleß | 53f6e29eb3 | |
Lucas Pleß | b224e1b0ba | |
Lucas Pleß | 8f2610314e |
|
@ -1,6 +1,7 @@
|
||||||
package de.ctdo.bunti.control;
|
package de.ctdo.bunti.control;
|
||||||
|
|
||||||
import de.ctdo.bunti.model.BuntiDevice;
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import de.ctdo.bunti.model.DeviceUpdate;
|
||||||
import de.ctdo.bunti.model.Room;
|
import de.ctdo.bunti.model.Room;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -8,12 +9,7 @@ import java.util.Map;
|
||||||
|
|
||||||
public interface BuntiController {
|
public interface BuntiController {
|
||||||
|
|
||||||
Collection<BuntiDevice> getAllDevices();
|
|
||||||
BuntiDevice getDeviceById(int deviceId);
|
|
||||||
|
|
||||||
boolean updateDeviceData(int deviceId, Map<String, Object> options);
|
boolean updateDeviceData(int deviceId, Map<String, Object> options);
|
||||||
|
DeviceUpdate getDeviceValues(int deviceId);
|
||||||
Collection<Room> getAllRooms();
|
|
||||||
Room getRoomById(int roomId);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package de.ctdo.bunti.control;
|
package de.ctdo.bunti.control;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import de.ctdo.bunti.dao.RoomsDAO;
|
import de.ctdo.bunti.model.*;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -11,34 +10,24 @@ import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.context.ApplicationEventPublisherAware;
|
import org.springframework.context.ApplicationEventPublisherAware;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import de.ctdo.bunti.DeviceChangedEvent;
|
|
||||||
import de.ctdo.bunti.dao.BuntiDevicesDAO;
|
import de.ctdo.bunti.dao.BuntiDevicesDAO;
|
||||||
import de.ctdo.bunti.model.*;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class BuntiControllerImpl implements BuntiController, ApplicationEventPublisherAware {
|
public class BuntiControllerImpl implements BuntiController, ApplicationEventPublisherAware {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(BuntiControllerImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(BuntiControllerImpl.class);
|
||||||
private ApplicationEventPublisher applicationEventPublisher = null;
|
private ApplicationEventPublisher applicationEventPublisher = null;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
private BuntiDevicesDAO devicesDAO;
|
private BuntiDevicesDAO devicesDAO;
|
||||||
private RoomsDAO roomsDAO;
|
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public final void setDevicesDAO(BuntiDevicesDAO devicesDAO) {
|
private DeviceValueCache deviceCache;
|
||||||
this.devicesDAO = devicesDAO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public final void setRoomsDAO(RoomsDAO roomsDAO) {
|
|
||||||
this.roomsDAO = roomsDAO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
|
public final void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
|
||||||
this.applicationEventPublisher = publisher;
|
this.applicationEventPublisher = publisher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean updateDeviceData(int deviceId, Map<String, Object> options) {
|
public final boolean updateDeviceData(int deviceId, Map<String, Object> options) {
|
||||||
BuntiDevice device = devicesDAO.getDeviceById(deviceId);
|
BuntiDevice device = devicesDAO.getDeviceById(deviceId);
|
||||||
|
@ -46,6 +35,10 @@ public class BuntiControllerImpl implements BuntiController, ApplicationEventPu
|
||||||
if (device != null) {
|
if (device != null) {
|
||||||
LOGGER.debug("publishEvent in BuntiController");
|
LOGGER.debug("publishEvent in BuntiController");
|
||||||
|
|
||||||
|
deviceCache.updateData(deviceId, options);
|
||||||
|
|
||||||
|
device.setValuesFromOptions(options) ;
|
||||||
|
|
||||||
this.applicationEventPublisher.publishEvent(new DeviceChangedEvent(this, device, options));
|
this.applicationEventPublisher.publishEvent(new DeviceChangedEvent(this, device, options));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -55,23 +48,8 @@ public class BuntiControllerImpl implements BuntiController, ApplicationEventPu
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Room> getAllRooms() {
|
public DeviceUpdate getDeviceValues(int deviceId) {
|
||||||
return roomsDAO.getRooms();
|
return deviceCache.getData(deviceId);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Room getRoomById(int roomId) {
|
|
||||||
return roomsDAO.getRoom(roomId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<BuntiDevice> getAllDevices() {
|
|
||||||
return devicesDAO.getAllDevices();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BuntiDevice getDeviceById(int deviceId) {
|
|
||||||
return devicesDAO.getDeviceById(deviceId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.ctdo.bunti;
|
package de.ctdo.bunti.control;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package de.ctdo.bunti.control;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.dao.BuntiDevicesDAO;
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import de.ctdo.bunti.model.DeviceUpdate;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class DeviceValueCache {
|
||||||
|
@Autowired
|
||||||
|
private BuntiDevicesDAO devicesDAO;
|
||||||
|
private Map<Integer, Map<String, Object>> deviceCache;
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
deviceCache = new HashMap<Integer, Map<String, Object>>();
|
||||||
|
|
||||||
|
for(BuntiDevice device: devicesDAO.getAllDevices()) {
|
||||||
|
deviceCache.put(device.getId(), device.getOptions());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateData(int deviceId, Map<String, Object> options) {
|
||||||
|
if(deviceCache == null) init();
|
||||||
|
|
||||||
|
Map<String, Object> cached = deviceCache.get(deviceId);
|
||||||
|
if(cached == null ) {
|
||||||
|
cached = new HashMap<String, Object>();
|
||||||
|
deviceCache.put(deviceId, cached);
|
||||||
|
}
|
||||||
|
|
||||||
|
cached.putAll(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public DeviceUpdate getData(int deviceId) {
|
||||||
|
if(deviceCache == null) init();
|
||||||
|
|
||||||
|
Map<String, Object> cached = deviceCache.get(deviceId);
|
||||||
|
|
||||||
|
DeviceUpdate du = new DeviceUpdate();
|
||||||
|
du.setDeviceId(deviceId);
|
||||||
|
du.setOptions(cached);
|
||||||
|
return du;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
package de.ctdo.bunti.dao;
|
package de.ctdo.bunti.dao;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ctdo.bunti.model.*;
|
import de.ctdo.bunti.model.BuntiDMXDevice;
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
|
||||||
public interface BuntiDevicesDAO {
|
public interface BuntiDevicesDAO {
|
||||||
|
|
||||||
|
@ -14,4 +14,6 @@ public interface BuntiDevicesDAO {
|
||||||
void addDevice(BuntiDevice device);
|
void addDevice(BuntiDevice device);
|
||||||
void removeDevice(int deviceId);
|
void removeDevice(int deviceId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,35 +2,48 @@ package de.ctdo.bunti.dao;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.ctdo.bunti.model.*;
|
import de.ctdo.bunti.model.BuntiDMXDevice;
|
||||||
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
|
||||||
public final class BuntiDevicesDAOImpl extends HibernateDaoSupport implements BuntiDevicesDAO {
|
@Repository
|
||||||
|
public final class BuntiDevicesDAOImpl implements BuntiDevicesDAO {
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
public void setEntityManager(EntityManager entityManager) {
|
||||||
|
this.em = entityManager;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BuntiDMXDevice> getAllDMXDevices() {
|
public List<BuntiDMXDevice> getAllDMXDevices() {
|
||||||
return getHibernateTemplate().loadAll(BuntiDMXDevice.class);
|
//TODO: hier noch nur die DMX Geräte suchen!
|
||||||
|
return em.createQuery("SELECT d FROM BuntiDevice d").getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BuntiDevice> getAllDevices() {
|
public List<BuntiDevice> getAllDevices() {
|
||||||
return getHibernateTemplate().loadAll(BuntiDevice.class);
|
return em.createQuery("SELECT d FROM BuntiDevice d").getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuntiDevice getDeviceById(int deviceId) {
|
public BuntiDevice getDeviceById(int deviceId) {
|
||||||
return getHibernateTemplate().get(BuntiDevice.class,deviceId);
|
return em.find(BuntiDevice.class, deviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addDevice(BuntiDevice device) {
|
public void addDevice(BuntiDevice device) {
|
||||||
getHibernateTemplate().save(device);
|
em.persist(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeDevice(int deviceId) {
|
public void removeDevice(int deviceId) {
|
||||||
getHibernateTemplate().delete(getDeviceById(deviceId));
|
em.remove(getDeviceById(deviceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,6 @@ import java.util.List;
|
||||||
public interface RoomsDAO {
|
public interface RoomsDAO {
|
||||||
List<Room> getRooms();
|
List<Room> getRooms();
|
||||||
Room getRoom(int id);
|
Room getRoom(int id);
|
||||||
Room addRoom(Room room);
|
void addRoom(Room room);
|
||||||
void removeRoom(int id);
|
void removeRoom(int id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,38 @@
|
||||||
package de.ctdo.bunti.dao;
|
package de.ctdo.bunti.dao;
|
||||||
|
|
||||||
import de.ctdo.bunti.model.Room;
|
import de.ctdo.bunti.model.Room;
|
||||||
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class RoomsDAOImpl extends HibernateDaoSupport implements RoomsDAO {
|
@Repository
|
||||||
|
public final class RoomsDAOImpl implements RoomsDAO {
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
public void setEntityManager(EntityManager entityManager) {
|
||||||
|
this.em = entityManager;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Room> getRooms() {
|
public List<Room> getRooms() {
|
||||||
return getHibernateTemplate().loadAll(Room.class);
|
return em.createQuery("SELECT r FROM Room r").getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Room getRoom(int id) {
|
public Room getRoom(int id) {
|
||||||
return getHibernateTemplate().get(Room.class, id);
|
return em.find(Room.class, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Room addRoom(Room room) {
|
public void addRoom(Room room) {
|
||||||
getHibernateTemplate().save(room);
|
em.persist(room);
|
||||||
return room;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeRoom(int id) {
|
public void removeRoom(int id) {
|
||||||
getHibernateTemplate().delete(getRoom(id));
|
em.remove(getRoom(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
package de.ctdo.bunti.devices;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public interface DeviceMixer {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
package de.ctdo.bunti.devices;
|
|
||||||
|
|
||||||
import org.springframework.context.ApplicationListener;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import de.ctdo.bunti.DeviceChangedEvent;
|
|
||||||
import de.ctdo.bunti.model.BuntiSwitchingDevice;
|
|
||||||
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class DeviceMixerImpl implements DeviceMixer, ApplicationListener<DeviceChangedEvent> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void onApplicationEvent(DeviceChangedEvent arg0) {
|
|
||||||
|
|
||||||
if( arg0.getDevice() instanceof BuntiSwitchingDevice) {
|
|
||||||
|
|
||||||
BuntiSwitchingDevice switchDev = (BuntiSwitchingDevice)arg0.getDevice();
|
|
||||||
switchDev.setValuesFromOptions(arg0.getOptions());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.ctdo.bunti.dmx;
|
package de.ctdo.bunti.dmx;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
import de.ctdo.bunti.model.DMXChannel;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.ctdo.bunti.dmx;
|
package de.ctdo.bunti.dmx;
|
||||||
|
|
||||||
import de.ctdo.bunti.DeviceChangedEvent;
|
import de.ctdo.bunti.control.DeviceChangedEvent;
|
||||||
import de.ctdo.bunti.artnet.SimpleArtNetSender;
|
import de.ctdo.bunti.artnet.SimpleArtNetSender;
|
||||||
import de.ctdo.bunti.model.BuntiDMXDevice;
|
import de.ctdo.bunti.model.BuntiDMXDevice;
|
||||||
import de.ctdo.bunti.model.BuntiDevice;
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
@ -40,6 +40,7 @@ public class DMXMixerImpl implements DMXMixer, ApplicationListener<DeviceChanged
|
||||||
|
|
||||||
@Scheduled(fixedDelay = NET_SEND_INTERVAL)
|
@Scheduled(fixedDelay = NET_SEND_INTERVAL)
|
||||||
public final void sendOutDMXBuffer() {
|
public final void sendOutDMXBuffer() {
|
||||||
|
/*
|
||||||
if (dmxMap.size() == 0) {
|
if (dmxMap.size() == 0) {
|
||||||
initDMXData();
|
initDMXData();
|
||||||
}
|
}
|
||||||
|
@ -48,7 +49,7 @@ public class DMXMixerImpl implements DMXMixer, ApplicationListener<DeviceChanged
|
||||||
LOGGER.debug("sending DMX Data");
|
LOGGER.debug("sending DMX Data");
|
||||||
artNetSender.sendDMXData(dmxMap, artNetDeviceAddress);
|
artNetSender.sendDMXData(dmxMap, artNetDeviceAddress);
|
||||||
hasDataChanged = false;
|
hasDataChanged = false;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,16 +60,16 @@ public class DMXMixerImpl implements DMXMixer, ApplicationListener<DeviceChanged
|
||||||
|
|
||||||
BuntiDMXDevice dmxDev = (BuntiDMXDevice) device;
|
BuntiDMXDevice dmxDev = (BuntiDMXDevice) device;
|
||||||
|
|
||||||
if (dmxDev.setValuesFromOptions(options)) {
|
//if (dmxDev.setValuesFromOptions(options)) {
|
||||||
|
|
||||||
dmxMap.putAll(dmxDev.getChannelData());
|
dmxMap.putAll(dmxDev.getChannelData());
|
||||||
|
|
||||||
LOGGER.info("setValuesFromOptions on " + device);
|
LOGGER.info("setValuesFromOptions on " + device);
|
||||||
return true;
|
return true;
|
||||||
}
|
//}
|
||||||
|
|
||||||
LOGGER.info("setValuesFromOptions on " + device + " failed");
|
// LOGGER.info("setValuesFromOptions on " + device + " failed");
|
||||||
return false;
|
// return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: lucas
|
||||||
|
* @date: 26.03.12 00:52
|
||||||
|
*/
|
||||||
|
public class ECMDCommand {
|
||||||
|
|
||||||
|
private String command;
|
||||||
|
private List<String> parameters = new ArrayList<String>();
|
||||||
|
|
||||||
|
public String getCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommand(String command) {
|
||||||
|
this.command = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getParameters() {
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParameters(List<String> parameters) {
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: lucas
|
||||||
|
* @date: 26.03.12 00:52
|
||||||
|
*/
|
||||||
|
public class ECMDResult {
|
||||||
|
|
||||||
|
private String resultString;
|
||||||
|
|
||||||
|
public String getResultString() {
|
||||||
|
return resultString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResultString(String resultString) {
|
||||||
|
this.resultString = resultString;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: lucas
|
||||||
|
* @date: 26.03.12 00:47
|
||||||
|
*/
|
||||||
|
public interface ECMDSender {
|
||||||
|
ECMDResult sendCommand(ECMDCommand command, String dest) throws IOException;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface EthersexMixer {
|
||||||
|
boolean updateDevice(BuntiDevice device, Map<String, Object> options);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.control.DeviceChangedEvent;
|
||||||
|
import de.ctdo.bunti.model.BuntiEthersexDevice;
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class EthersexMixerImpl implements EthersexMixer, ApplicationListener<DeviceChangedEvent> {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EthersexMixerImpl.class);
|
||||||
|
// private boolean hasDataChanged = true;
|
||||||
|
ECMDSender sender;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public void setECMDSender(ECMDSender sender) {
|
||||||
|
this.sender = sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final boolean updateDevice(BuntiDevice device, Map<String, Object> options) {
|
||||||
|
if(device == null || options == null || options.size() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BuntiEthersexDevice edev = (BuntiEthersexDevice) device;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// BuntiDMXDevice dmxDev = (BuntiDMXDevice) device;
|
||||||
|
//
|
||||||
|
// if (dmxDev.setValuesFromOptions(options)) {
|
||||||
|
//
|
||||||
|
// dmxMap.putAll(dmxDev.getChannelData());
|
||||||
|
//
|
||||||
|
// LOGGER.info("setValuesFromOptions on " + device);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
|
||||||
|
LOGGER.info("setValuesFromOptions on " + device + " failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void onApplicationEvent(DeviceChangedEvent arg0) {
|
||||||
|
if (arg0.getDevice() instanceof BuntiEthersexDevice) {
|
||||||
|
updateDevice(arg0.getDevice(), arg0.getOptions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
package de.ctdo.bunti.ethersex;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: lucas
|
||||||
|
* @date: 26.03.12 00:54
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class SimpleECMDSender implements ECMDSender {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleECMDSender.class);
|
||||||
|
private static final int ECMD_TCP_PORT = 2701;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ECMDResult sendCommand(ECMDCommand command, String dest) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Socket client = new Socket(dest, ECMD_TCP_PORT);
|
||||||
|
client.setSoTimeout(2000);
|
||||||
|
|
||||||
|
|
||||||
|
DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());
|
||||||
|
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||||
|
|
||||||
|
StringBuilder params = new StringBuilder();
|
||||||
|
for(String param: command.getParameters()) {
|
||||||
|
params.append(" ");
|
||||||
|
params.append(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
outToServer.writeBytes(command.getCommand() + params.toString() + '\n');
|
||||||
|
|
||||||
|
ECMDResult result = new ECMDResult();
|
||||||
|
result.setResultString(inFromServer.readLine());
|
||||||
|
|
||||||
|
client.close();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOGGER.error("Could not send ECMDCommand to " + dest + " on port " + ECMD_TCP_PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.DMX;
|
import de.ctdo.bunti.dmx.DMX;
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
|
||||||
import de.ctdo.bunti.dmx.DMXChannels;
|
import de.ctdo.bunti.dmx.DMXChannels;
|
||||||
import org.codehaus.jackson.annotate.JsonIgnore;
|
import org.codehaus.jackson.annotate.JsonIgnore;
|
||||||
import org.hibernate.annotations.Entity;
|
import org.hibernate.annotations.Entity;
|
||||||
|
@ -49,7 +48,7 @@ public abstract class BuntiDMXDevice extends BuntiDevice {
|
||||||
* @param value The channel value to set.
|
* @param value The channel value to set.
|
||||||
* @return True on success, otherwise false
|
* @return True on success, otherwise false
|
||||||
*/
|
*/
|
||||||
protected final boolean setChannelValueByName(String name, int value) {
|
public final boolean setChannelValueByName(String name, int value) {
|
||||||
DMXChannel dx = dmxChannels.getChannelByName(name);
|
DMXChannel dx = dmxChannels.getChannelByName(name);
|
||||||
if (dx != null) {
|
if (dx != null) {
|
||||||
dx.setValue(DMX.sanitizeDMXValue(value));
|
dx.setValue(DMX.sanitizeDMXValue(value));
|
||||||
|
@ -66,7 +65,7 @@ public abstract class BuntiDMXDevice extends BuntiDevice {
|
||||||
*/
|
*/
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
@Transient
|
@Transient
|
||||||
protected final int getChannelValueByName(String name) {
|
public final int getChannelValueByName(String name) {
|
||||||
DMXChannel dx = dmxChannels.getChannelByName(name);
|
DMXChannel dx = dmxChannels.getChannelByName(name);
|
||||||
if (dx != null) {
|
if (dx != null) {
|
||||||
return dx.getValue();
|
return dx.getValue();
|
||||||
|
|
|
@ -11,7 +11,7 @@ import java.util.Map;
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "devices")
|
@Table(name = "devices")
|
||||||
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
|
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
|
||||||
public abstract class BuntiDevice {
|
public class BuntiDevice {
|
||||||
private int id;
|
private int id;
|
||||||
private String deviceName;
|
private String deviceName;
|
||||||
private String picture;
|
private String picture;
|
||||||
|
@ -85,12 +85,12 @@ public abstract class BuntiDevice {
|
||||||
/**
|
/**
|
||||||
* Switch this device off.
|
* Switch this device off.
|
||||||
*/
|
*/
|
||||||
public abstract void switchOff();
|
public void switchOff() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch this device on.
|
* Switch this device on.
|
||||||
*/
|
*/
|
||||||
public abstract void switchOn();
|
public void switchOn() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The the internal options corresponding to the given Key Value Map
|
* The the internal options corresponding to the given Key Value Map
|
||||||
|
@ -98,11 +98,15 @@ public abstract class BuntiDevice {
|
||||||
* @param options The options Map.
|
* @param options The options Map.
|
||||||
* @return True on success. False otherwise.
|
* @return True on success. False otherwise.
|
||||||
*/
|
*/
|
||||||
public abstract boolean setValuesFromOptions(Map<String, Object> options);
|
public boolean setValuesFromOptions(Map<String, Object> options) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
public abstract Map<String, Object> getOptions();
|
public Map<String, Object> getOptions() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import org.hibernate.annotations.Entity;
|
||||||
|
|
||||||
|
import javax.persistence.Transient;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public abstract class BuntiEthersexDevice extends BuntiDevice {
|
||||||
|
private String hostname;
|
||||||
|
private int port;
|
||||||
|
private final Map<String, Integer> ports = new HashMap<String, Integer>();
|
||||||
|
|
||||||
|
|
||||||
|
public BuntiEthersexDevice() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostname() {
|
||||||
|
return hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHostname(String hostname) {
|
||||||
|
this.hostname = hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPort(int port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final boolean setPortByName(String name, int value) {
|
||||||
|
if (ports.containsKey(name)) {
|
||||||
|
|
||||||
|
ports.put(name, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
public final int getPortByName(String name) {
|
||||||
|
if (ports.containsKey(name)) {
|
||||||
|
return ports.get(name);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setValuesFromOptions(Map<String, Object> options) {
|
||||||
|
for (Map.Entry<String, Object> opt : options.entrySet()) {
|
||||||
|
try {
|
||||||
|
int value = Integer.parseInt(opt.getValue().toString());
|
||||||
|
|
||||||
|
if (!setPortByName(opt.getKey(), value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getOptions() {
|
||||||
|
Map<String, Object> options = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
for(Map.Entry<String, Integer> p: ports.entrySet()) {
|
||||||
|
options.put(p.getKey(), p.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a channel to this DMX Device
|
||||||
|
* used internally by subclasses to define their structure
|
||||||
|
* @param channel DMXChannel to add (name and offset)
|
||||||
|
* @return True on success, false otherwise.
|
||||||
|
*/
|
||||||
|
public final void addPort(String channel) {
|
||||||
|
ports.put(channel, 0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,41 +0,0 @@
|
||||||
package de.ctdo.bunti.model;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.Transient;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
public abstract class BuntiSwitchingDevice extends BuntiDevice {
|
|
||||||
private static final String OPTION_STATE = "state";
|
|
||||||
private boolean state = false;
|
|
||||||
|
|
||||||
public BuntiSwitchingDevice() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final boolean setValuesFromOptions(Map<String, Object> options) {
|
|
||||||
|
|
||||||
if(options.containsKey(OPTION_STATE)) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
boolean value = Boolean.parseBoolean(options.get(OPTION_STATE).toString());
|
|
||||||
setState(value);
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transient
|
|
||||||
public boolean isState() {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setState(boolean state) {
|
|
||||||
this.state = state;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.ctdo.bunti.dmx.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
public class DMXChannel {
|
public class DMXChannel {
|
||||||
private int offset;
|
private int offset;
|
|
@ -1,6 +1,5 @@
|
||||||
package de.ctdo.bunti.webmodel;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Transient;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Lampel extends BuntiEthersexDevice {
|
||||||
|
private static final String PORTC = "2"; // TODO: rausfinden welche PortNummer das ist
|
||||||
|
public static final int LAMPEL_OFF = 0x00;
|
||||||
|
public static final int LAMPEL_RED = 0x80; // TODO: rausfinden ob die Reihenfolge stimmt
|
||||||
|
public static final int LAMPEL_YELLOW = 0x40;
|
||||||
|
public static final int LAMPEL_GREEN = 0x20;
|
||||||
|
|
||||||
|
public Lampel() {
|
||||||
|
addPort(PORTC);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
public int getLampelState() {
|
||||||
|
return getPortByName(PORTC);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLampelState(int value) {
|
||||||
|
setPortByName(PORTC, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void switchOff() {
|
||||||
|
setPortByName(PORTC, LAMPEL_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void switchOn() {
|
||||||
|
setPortByName(PORTC, LAMPEL_GREEN | LAMPEL_RED | LAMPEL_YELLOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Lampel ");
|
||||||
|
sb.append(getId());
|
||||||
|
sb.append(", ");
|
||||||
|
sb.append(getDeviceName());
|
||||||
|
sb.append(" [");
|
||||||
|
sb.append(getPortByName(PORTC));
|
||||||
|
sb.append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.DMX;
|
import de.ctdo.bunti.dmx.DMX;
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
|
||||||
import org.codehaus.jackson.annotate.JsonIgnore;
|
import org.codehaus.jackson.annotate.JsonIgnore;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.DMX;
|
import de.ctdo.bunti.dmx.DMX;
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
|
||||||
import org.codehaus.jackson.annotate.JsonIgnore;
|
import org.codehaus.jackson.annotate.JsonIgnore;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package de.ctdo.bunti.web;
|
package de.ctdo.bunti.web;
|
||||||
|
|
||||||
import de.ctdo.bunti.control.BuntiController;
|
import de.ctdo.bunti.control.BuntiController;
|
||||||
import de.ctdo.bunti.webmodel.DeviceUpdate;
|
import de.ctdo.bunti.model.DeviceUpdate;
|
||||||
import de.ctdo.bunti.webmodel.DeviceUpdates;
|
import de.ctdo.bunti.web.model.DeviceUpdates;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -13,21 +13,28 @@ import org.springframework.web.bind.annotation.*;
|
||||||
@RequestMapping(value = "/control")
|
@RequestMapping(value = "/control")
|
||||||
public class DeviceControlController {
|
public class DeviceControlController {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(DeviceControlController.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(DeviceControlController.class);
|
||||||
private BuntiController controller;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public final void setController(BuntiController controller) {
|
private BuntiController controller;
|
||||||
this.controller = controller;
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "/devices", method = RequestMethod.POST)
|
@RequestMapping(value = "/devices", method = RequestMethod.POST)
|
||||||
public void setDevices(@RequestBody DeviceUpdates updates) {
|
@ResponseBody
|
||||||
LOGGER.info("handle PUT /devices" + " request update=" + updates.toString() );
|
public String setDevices(@RequestBody DeviceUpdates updates) {
|
||||||
|
LOGGER.info("handle POST /devices" + " request update=" + updates.toString() );
|
||||||
|
|
||||||
for (DeviceUpdate update: updates.getUpdates()) {
|
for (DeviceUpdate update: updates.getUpdates()) {
|
||||||
LOGGER.info("Update deviceId=" + update.getDeviceId());
|
LOGGER.info("Update deviceId=" + update.getDeviceId());
|
||||||
controller.updateDeviceData(update.getDeviceId(), update.getOptions());
|
controller.updateDeviceData(update.getDeviceId(), update.getOptions());
|
||||||
}
|
}
|
||||||
|
return "{\"status\":\"OK\"}";
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/devices/{id}", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public DeviceUpdate getDeviceValues(@PathVariable("id") int id) {
|
||||||
|
LOGGER.info("handle GET /devices/{id} " + id );
|
||||||
|
|
||||||
|
return controller.getDeviceValues(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,28 +11,26 @@ import java.util.Collection;
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping(value = "/devices")
|
@RequestMapping(value = "/devices")
|
||||||
public class DevicesController {
|
public class DevicesController {
|
||||||
|
@Autowired
|
||||||
private BuntiDevicesDAO devicesDAO;
|
private BuntiDevicesDAO devicesDAO;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public void setDevicesDAO(BuntiDevicesDAO devicesDAO) {
|
|
||||||
this.devicesDAO = devicesDAO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "", method = RequestMethod.GET)
|
@RequestMapping(value = "", method = RequestMethod.GET)
|
||||||
public @ResponseBody Collection<BuntiDevice> getAll() {
|
@ResponseBody
|
||||||
|
public Collection<BuntiDevice> getAll() {
|
||||||
return devicesDAO.getAllDevices();
|
return devicesDAO.getAllDevices();
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
||||||
public @ResponseBody BuntiDevice getDeviceById(@PathVariable("id") int id) {
|
@ResponseBody
|
||||||
|
public BuntiDevice getDeviceById(@PathVariable("id") int id) {
|
||||||
return devicesDAO.getDeviceById(id);
|
return devicesDAO.getDeviceById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "", method = RequestMethod.POST)
|
@RequestMapping(value = "", method = RequestMethod.POST)
|
||||||
public @ResponseBody BuntiDevice setDevices(@RequestBody BuntiDevice device) {
|
@ResponseBody
|
||||||
|
public String setDevices(@RequestBody BuntiDevice device) {
|
||||||
devicesDAO.addDevice(device);
|
devicesDAO.addDevice(device);
|
||||||
return device;
|
return "{\"status\":\"OK\"}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,26 +13,24 @@ import java.util.List;
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping(value = "/rooms")
|
@RequestMapping(value = "/rooms")
|
||||||
public class RoomsController {
|
public class RoomsController {
|
||||||
|
@Autowired
|
||||||
private RoomsDAO roomsDAO;
|
private RoomsDAO roomsDAO;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public void setRoomsDAO(RoomsDAO roomsDAO) {
|
|
||||||
this.roomsDAO = roomsDAO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping(value = "", method = RequestMethod.GET)
|
@RequestMapping(value = "", method = RequestMethod.GET)
|
||||||
public @ResponseBody Collection<Room> getAll() {
|
@ResponseBody
|
||||||
|
public Collection<Room> getAll() {
|
||||||
return roomsDAO.getRooms();
|
return roomsDAO.getRooms();
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
||||||
public @ResponseBody Room getRoomById(@PathVariable("id") int id) {
|
@ResponseBody
|
||||||
|
public Room getRoomById(@PathVariable("id") int id) {
|
||||||
return roomsDAO.getRoom(id);
|
return roomsDAO.getRoom(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/{id}/devices", method = RequestMethod.GET)
|
@RequestMapping(value = "/{id}/devices", method = RequestMethod.GET)
|
||||||
public @ResponseBody
|
@ResponseBody
|
||||||
List<BuntiDevice> getDevicesFromRoom(@PathVariable("id") int id) {
|
public List<BuntiDevice> getDevicesFromRoom(@PathVariable("id") int id) {
|
||||||
Room room = roomsDAO.getRoom(id);
|
Room room = roomsDAO.getRoom(id);
|
||||||
|
|
||||||
if(room != null) {
|
if(room != null) {
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
package de.ctdo.bunti.webmodel;
|
package de.ctdo.bunti.web.model;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.model.DeviceUpdate;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -26,4 +28,5 @@ public class DeviceUpdates {
|
||||||
public void setTimeStamp(long timeStamp) {
|
public void setTimeStamp(long timeStamp) {
|
||||||
this.timeStamp = timeStamp;
|
this.timeStamp = timeStamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,43 +1,46 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
|
||||||
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"
|
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||||
xmlns:jdbc="http://www.springframework.org/schema/jdbc">
|
xmlns:context="http://www.springframework.org/schema/context"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||||
|
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/jdbc
|
||||||
|
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
|
||||||
|
http://www.springframework.org/schema/tx
|
||||||
|
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
|
||||||
|
http://www.springframework.org/schema/context
|
||||||
|
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
|
||||||
|
|
||||||
<jdbc:embedded-database id="dataSource" type="H2">
|
<jdbc:embedded-database id="dataSource" type="H2">
|
||||||
<jdbc:script location="classpath:init_schema.sql" />
|
<jdbc:script location="classpath:init_schema.sql" />
|
||||||
<jdbc:script location="classpath:init_data.sql" />
|
<jdbc:script location="classpath:init_data.sql" />
|
||||||
</jdbc:embedded-database>
|
</jdbc:embedded-database>
|
||||||
|
|
||||||
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
|
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
|
||||||
<property name="packagesToScan" value="de.ctdo.bunti.model"/>
|
<property name="packagesToScan" value="de.ctdo.bunti.dmx.model" />
|
||||||
<property name="hibernateProperties">
|
|
||||||
<props>
|
|
||||||
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
|
|
||||||
<prop key="hibernate.show_sql">true</prop>
|
|
||||||
<!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
|
|
||||||
</props>
|
|
||||||
</property>
|
|
||||||
<property name="dataSource" ref="dataSource" />
|
<property name="dataSource" ref="dataSource" />
|
||||||
|
<property name="jpaVendorAdapter">
|
||||||
|
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
|
||||||
|
<property name="showSql" value="true" />
|
||||||
|
<property name="generateDdl" value="false" />
|
||||||
|
<!-- <property name="database" value="DERBY" />-->
|
||||||
|
<property name="database" value="H2" />
|
||||||
|
</bean>
|
||||||
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="roomsDAO" class="de.ctdo.bunti.dao.RoomsDAOImpl">
|
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
<property name="entityManagerFactory" ref="entityManagerFactory" />
|
||||||
|
<property name="jpaDialect">
|
||||||
|
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
|
||||||
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="devicesDAO" class="de.ctdo.bunti.dao.BuntiDevicesDAOImpl">
|
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
|
|
||||||
|
|
||||||
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
|
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
|
|
||||||
<tx:annotation-driven />
|
<tx:annotation-driven />
|
||||||
|
|
||||||
|
|
||||||
|
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
|
|
@ -6,14 +6,22 @@ insert into rooms (ROOM_ID, floor, roomName, xCord, yCord) values (null, '2. Eta
|
||||||
insert into rooms (ROOM_ID, floor, roomName, xCord, yCord) values (null, '2. Etage', 'Flur', '1', '1');
|
insert into rooms (ROOM_ID, floor, roomName, xCord, yCord) values (null, '2. Etage', 'Flur', '1', '1');
|
||||||
|
|
||||||
|
|
||||||
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress)
|
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress, hostname, port)
|
||||||
values ('Par56Spot',null,'Lampe1',null, 1);
|
values ('Par56Spot',null,'Lampe1',null, 1, null, null);
|
||||||
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress)
|
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress, hostname, port)
|
||||||
values ('Par56Spot',null,'Lampe2',null, 6);
|
values ('Par56Spot',null,'Lampe2',null, 6, null, null);
|
||||||
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress)
|
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress, hostname, port)
|
||||||
values ('Par56Spot',null,'Lampe3',null, 11);
|
values ('Par56Spot',null,'Lampe3',null, 11, null, null);
|
||||||
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress)
|
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress, hostname, port)
|
||||||
values ('Par56Spot',null,'Lampe4',null, 16);
|
values ('Par56Spot',null,'Lampe4',null, 16, null, null);
|
||||||
|
|
||||||
|
|
||||||
|
insert into devices (DTYPE, BUNTIDEVICE_ID, deviceName, picture, startAddress, hostname, port)
|
||||||
|
values ('Lampel',null,'Die Lampel',null, null, 'lampel.ctdo.de', 2701);
|
||||||
|
|
||||||
|
|
||||||
|
insert into ROOM_BUNTIDEVICE (ROOM_ID, BUNTIDEVICE_ID) VALUES (2, 1);
|
||||||
|
insert into ROOM_BUNTIDEVICE (ROOM_ID, BUNTIDEVICE_ID) VALUES (2, 2);
|
||||||
|
insert into ROOM_BUNTIDEVICE (ROOM_ID, BUNTIDEVICE_ID) VALUES (3, 3);
|
||||||
|
insert into ROOM_BUNTIDEVICE (ROOM_ID, BUNTIDEVICE_ID) VALUES (3, 4);
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ create table devices (DTYPE varchar(31) not null,
|
||||||
deviceName varchar(255),
|
deviceName varchar(255),
|
||||||
picture varchar(255),
|
picture varchar(255),
|
||||||
startAddress integer,
|
startAddress integer,
|
||||||
|
hostname varchar(255),
|
||||||
|
port integer,
|
||||||
primary key (BUNTIDEVICE_ID));
|
primary key (BUNTIDEVICE_ID));
|
||||||
|
|
||||||
create table rooms (ROOM_ID integer generated by default as identity (start with 1),
|
create table rooms (ROOM_ID integer generated by default as identity (start with 1),
|
||||||
|
|
|
@ -1,40 +1,44 @@
|
||||||
package de.ctdo.bunti.control;
|
package de.ctdo.bunti.control;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.dao.BuntiDevicesDAO;
|
||||||
|
import de.ctdo.bunti.model.BuntiDevice;
|
||||||
|
import de.ctdo.bunti.model.DeviceUpdate;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
||||||
//@ContextConfiguration(locations = { "classpath:/META-INF/spring/root-context.xml","classpath:/de/ctdo/bunti/hibernate-test-context.xml" })
|
import java.util.HashMap;
|
||||||
//@RunWith(SpringJUnit4ClassRunner.class)
|
import java.util.Map;
|
||||||
//public class BuntiControllerImplTest {
|
|
||||||
|
|
||||||
// @Autowired
|
@ContextConfiguration(locations = { "classpath:/META-INF/spring/root-context.xml","classpath:/de/ctdo/bunti/hibernate-test-context.xml" })
|
||||||
// BuntiController dut;
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
//
|
public class BuntiControllerImplTest {
|
||||||
// @Test
|
|
||||||
// public void testUpdateDeviceData() throws Exception {
|
@Autowired
|
||||||
//
|
BuntiController dut;
|
||||||
// }
|
|
||||||
//
|
@Autowired
|
||||||
// @Test
|
BuntiDevicesDAO dao;
|
||||||
// public void testGetAllRooms() throws Exception {
|
|
||||||
//
|
@Test
|
||||||
// }
|
public void test1() throws Exception {
|
||||||
//
|
|
||||||
// @Test
|
BuntiDevice dev = dao.getDeviceById(2);
|
||||||
// public void testGetRoomById() throws Exception {
|
DeviceUpdate upt = dut.getDeviceValues(2);
|
||||||
//
|
|
||||||
// }
|
Map<String, Object> data = new HashMap<String, Object>();
|
||||||
//
|
data.put("red", 10);
|
||||||
// @Test
|
data.put("green", 20);
|
||||||
// public void testGetAllDevices() throws Exception {
|
data.put("blue", 30);
|
||||||
//
|
|
||||||
// }
|
dut.updateDeviceData(2, data);
|
||||||
//
|
|
||||||
// @Test
|
upt = dut.getDeviceValues(2);
|
||||||
// public void testGetDeviceById() throws Exception {
|
|
||||||
//
|
return;
|
||||||
// }
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
|
@ -24,13 +23,13 @@ public class BuntiDevicesDAOImplTest {
|
||||||
@Test
|
@Test
|
||||||
public void testGetAllDMXDevices() throws Exception {
|
public void testGetAllDMXDevices() throws Exception {
|
||||||
List<BuntiDMXDevice> deviceList = dut.getAllDMXDevices();
|
List<BuntiDMXDevice> deviceList = dut.getAllDMXDevices();
|
||||||
assertEquals(4, deviceList.size());
|
assertEquals(5, deviceList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetAllDevices() throws Exception {
|
public void testGetAllDevices() throws Exception {
|
||||||
List<BuntiDevice> deviceList = dut.getAllDevices();
|
List<BuntiDevice> deviceList = dut.getAllDevices();
|
||||||
assertEquals(4, deviceList.size());
|
assertEquals(5, deviceList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.ctdo.bunti.dmx;
|
package de.ctdo.bunti.dmx;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
import de.ctdo.bunti.model.DMXChannel;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package de.ctdo.bunti.dmx;
|
package de.ctdo.bunti.dmx;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
import de.ctdo.bunti.model.DMXChannel;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package de.ctdo.bunti.dmx;
|
package de.ctdo.bunti.dmx;
|
||||||
|
|
||||||
import de.ctdo.bunti.model.BuntiDevice;
|
|
||||||
import de.ctdo.bunti.model.Par56Spot;
|
import de.ctdo.bunti.model.Par56Spot;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
import de.ctdo.bunti.dmx.model.DMXChannel;
|
import de.ctdo.bunti.model.BuntiDMXDevice;
|
||||||
|
import de.ctdo.bunti.model.DMXChannel;
|
||||||
|
import de.ctdo.bunti.model.Par56Spot;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.model.Par56Spot;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static junit.framework.Assert.*;
|
import static junit.framework.Assert.*;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.ctdo.bunti.model;
|
package de.ctdo.bunti.model;
|
||||||
|
|
||||||
|
import de.ctdo.bunti.model.Strobe1500;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
|
@ -1,39 +1,45 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
|
||||||
xmlns:tx="http://www.springframework.org/schema/tx"
|
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
|
xmlns:context="http://www.springframework.org/schema/context"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||||
|
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/jdbc
|
||||||
|
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
|
||||||
|
http://www.springframework.org/schema/tx
|
||||||
|
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
|
||||||
|
http://www.springframework.org/schema/context
|
||||||
|
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
|
||||||
|
|
||||||
<jdbc:embedded-database id="dataSource" type="H2">
|
<jdbc:embedded-database id="dataSource" type="H2">
|
||||||
<jdbc:script location="classpath:init_schema.sql" />
|
<jdbc:script location="classpath:init_schema.sql" />
|
||||||
<jdbc:script location="classpath:init_data.sql" />
|
<jdbc:script location="classpath:init_data.sql" />
|
||||||
</jdbc:embedded-database>
|
</jdbc:embedded-database>
|
||||||
|
|
||||||
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
|
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
|
||||||
<property name="packagesToScan" value="de.ctdo.bunti.model"/>
|
<property name="packagesToScan" value="de.ctdo.bunti.model" />
|
||||||
<property name="hibernateProperties">
|
|
||||||
<props>
|
|
||||||
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
|
|
||||||
<prop key="hibernate.show_sql">true</prop>
|
|
||||||
<!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
|
|
||||||
</props>
|
|
||||||
</property>
|
|
||||||
<property name="dataSource" ref="dataSource" />
|
<property name="dataSource" ref="dataSource" />
|
||||||
|
<property name="jpaVendorAdapter">
|
||||||
|
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
|
||||||
|
<property name="showSql" value="true" />
|
||||||
|
<property name="generateDdl" value="false" />
|
||||||
|
<!-- <property name="database" value="DERBY" />-->
|
||||||
|
<property name="database" value="H2" />
|
||||||
|
</bean>
|
||||||
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
|
||||||
<bean id="roomsDAO" class="de.ctdo.bunti.dao.RoomsDAOImpl">
|
<property name="entityManagerFactory" ref="entityManagerFactory" />
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
<property name="jpaDialect">
|
||||||
</bean>
|
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
|
||||||
|
</property>
|
||||||
<bean id="devicesDAO" class="de.ctdo.bunti.dao.BuntiDevicesDAOImpl">
|
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
|
|
||||||
<property name="sessionFactory" ref="hibernateSessionFactory" />
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<tx:annotation-driven />
|
<tx:annotation-driven />
|
||||||
|
|
||||||
|
<context:component-scan base-package="de.ctdo.bunti.dao" />
|
||||||
|
|
||||||
</beans>
|
</beans>
|
Loading…
Reference in New Issue