16 package com.sonycsl.echo.node;
18 import java.io.IOException;
19 import java.net.InetAddress;
20 import java.net.SocketException;
21 import java.net.UnknownHostException;
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.List;
32 import com.sonycsl.echo.eoj.device.airconditioner.*;
33 import com.sonycsl.echo.eoj.device.audiovisual.*;
34 import com.sonycsl.echo.eoj.device.cookinghousehold.*;
35 import com.sonycsl.echo.eoj.device.health.*;
36 import com.sonycsl.echo.eoj.device.housingfacilities.*;
37 import com.sonycsl.echo.eoj.device.managementoperation.*;
38 import com.sonycsl.echo.eoj.device.sensor.*;
39 import com.sonycsl.echo.eoj.profile.*;
40 import com.sonycsl.echo.eoj.profile.NodeProfile.Proxy;
44 private static HashMap<Short, DeviceProxyCreator> mProxyCreators =
new HashMap<Short, DeviceProxyCreator>();
47 private List<DeviceObject> mDevices =
new ArrayList<DeviceObject>();
48 private String mAddress;
53 mNodeProfile = nodeProfile;
56 d.allocateSelfDeviceInstanceCode();
66 mNodeProfile =
new NodeProfile.Proxy();
70 Echo.getEventListener().onNewNode(
this);
74 Echo.getEventListener().onNewNode(
this);
78 return EchoSocket.SELF_ADDRESS.equals(mAddress);
82 return !(EchoSocket.SELF_ADDRESS.equals(mAddress));
86 InetAddress address = null;
88 address = InetAddress.getByName(mAddress);
89 }
catch (UnknownHostException e) {
105 DeviceObject device = newOtherDevice(echoClassCode, echoInstanceCode);
111 if(device == null)
return;
112 if(device.
getNode() ==
this)
return;
114 mDevices.add(device);
116 device.allocateSelfDeviceInstanceCode();
117 device.setNode(
this);
139 if(device == null)
return;
140 if(device.
getNode() !=
this)
return;
141 mDevices.remove(device);
146 if(d.getEchoClassCode() == echoClassCode
147 && d.getInstanceCode() == echoInstanceCode) {
155 if(device == null)
return false;
156 if(device.
getNode() !=
this)
return false;
157 return mDevices.contains(device);
166 && mNodeProfile.getInstanceCode() == echoInstanceCode) {
169 return getDevice(echoClassCode, echoInstanceCode);
174 short echoClassCode = EchoUtils.getEchoClassCode(classGroupCode, classCode);
180 && mNodeProfile.getInstanceCode() == echoInstanceCode) {
193 if(d.getEchoClassCode() == echoClassCode
194 && d.getInstanceCode() == echoInstanceCode) {
206 List<DeviceObject> ret =
new ArrayList<DeviceObject>();
208 if(d.getEchoClassCode() == echoClassCode) {
219 private static DeviceObject newOtherDevice(
short echoClassCode, byte instanceCode) {
220 if(mProxyCreators.containsKey(echoClassCode)) {
221 return mProxyCreators.get(echoClassCode).create(instanceCode);
223 switch(echoClassCode) {
224 case ActivityAmountSensor.ECHO_CLASS_CODE:
return new ActivityAmountSensor.Proxy(instanceCode);
225 case AirPollutionSensor.ECHO_CLASS_CODE:
return new AirPollutionSensor.Proxy(instanceCode);
226 case AirSpeedSensor.ECHO_CLASS_CODE:
return new AirSpeedSensor.Proxy(instanceCode);
227 case BathHeatingStatusSensor.ECHO_CLASS_CODE:
return new BathHeatingStatusSensor.Proxy(instanceCode);
228 case BathWaterLevelSensor.ECHO_CLASS_CODE:
return new BathWaterLevelSensor.Proxy(instanceCode);
229 case BedPresenceSensor.ECHO_CLASS_CODE:
return new BedPresenceSensor.Proxy(instanceCode);
230 case CallSensor.ECHO_CLASS_CODE:
return new CallSensor.Proxy(instanceCode);
231 case CigaretteSmokeSensor.ECHO_CLASS_CODE:
return new CigaretteSmokeSensor.Proxy(instanceCode);
232 case CO2Sensor.ECHO_CLASS_CODE:
return new CO2Sensor.Proxy(instanceCode);
233 case CondensationSensor.ECHO_CLASS_CODE:
return new CondensationSensor.Proxy(instanceCode);
234 case CrimePreventionSensor.ECHO_CLASS_CODE:
return new CrimePreventionSensor.Proxy(instanceCode);
235 case CurrentValueSensor.ECHO_CLASS_CODE:
return new CurrentValueSensor.Proxy(instanceCode);
236 case DifferentialPressureSensor.ECHO_CLASS_CODE:
return new DifferentialPressureSensor.Proxy(instanceCode);
237 case EarthquakeSensor.ECHO_CLASS_CODE:
return new EarthquakeSensor.Proxy(instanceCode);
238 case ElectricEnergySensor.ECHO_CLASS_CODE:
return new ElectricEnergySensor.Proxy(instanceCode);
239 case ElectricLeakSensor.ECHO_CLASS_CODE:
return new ElectricLeakSensor.Proxy(instanceCode);
240 case EmergencyButton.ECHO_CLASS_CODE:
return new EmergencyButton.Proxy(instanceCode);
241 case FireSensor.ECHO_CLASS_CODE:
return new FireSensor.Proxy(instanceCode);
242 case FirstAidSensor.ECHO_CLASS_CODE:
return new FirstAidSensor.Proxy(instanceCode);
243 case FlameSensor.ECHO_CLASS_CODE:
return new FlameSensor.Proxy(instanceCode);
244 case GasLeakSensor.ECHO_CLASS_CODE:
return new GasLeakSensor.Proxy(instanceCode);
245 case GasSensor.ECHO_CLASS_CODE:
return new GasSensor.Proxy(instanceCode);
246 case HumanBodyLocationSensor.ECHO_CLASS_CODE:
return new HumanBodyLocationSensor.Proxy(instanceCode);
247 case HumanDetectionSensor.ECHO_CLASS_CODE:
return new HumanDetectionSensor.Proxy(instanceCode);
248 case HumiditySensor.ECHO_CLASS_CODE:
return new HumiditySensor.Proxy(instanceCode);
249 case IlluminanceSensor.ECHO_CLASS_CODE:
return new IlluminanceSensor.Proxy(instanceCode);
250 case MailingSensor.ECHO_CLASS_CODE:
return new MailingSensor.Proxy(instanceCode);
251 case MicromotionSensor.ECHO_CLASS_CODE:
return new MicromotionSensor.Proxy(instanceCode);
252 case OdorSensor.ECHO_CLASS_CODE:
return new OdorSensor.Proxy(instanceCode);
253 case OpenCloseSensor.ECHO_CLASS_CODE:
return new OpenCloseSensor.Proxy(instanceCode);
254 case OxygenSensor.ECHO_CLASS_CODE:
return new OxygenSensor.Proxy(instanceCode);
255 case PassageSensor.ECHO_CLASS_CODE:
return new PassageSensor.Proxy(instanceCode);
256 case RainSensor.ECHO_CLASS_CODE:
return new RainSensor.Proxy(instanceCode);
257 case SnowSensor.ECHO_CLASS_CODE:
return new SnowSensor.Proxy(instanceCode);
258 case SoundSensor.ECHO_CLASS_CODE:
return new SoundSensor.Proxy(instanceCode);
259 case TemperatureSensor.ECHO_CLASS_CODE:
return new TemperatureSensor.Proxy(instanceCode);
260 case VisitorSensor.ECHO_CLASS_CODE:
return new VisitorSensor.Proxy(instanceCode);
261 case VOCSensor.ECHO_CLASS_CODE:
return new VOCSensor.Proxy(instanceCode);
262 case WaterFlowRateSensor.ECHO_CLASS_CODE:
return new WaterFlowRateSensor.Proxy(instanceCode);
263 case WaterLeakSensor.ECHO_CLASS_CODE:
return new WaterLeakSensor.Proxy(instanceCode);
264 case WaterLevelSensor.ECHO_CLASS_CODE:
return new WaterLevelSensor.Proxy(instanceCode);
265 case WaterOverflowSensor.ECHO_CLASS_CODE:
return new WaterOverflowSensor.Proxy(instanceCode);
266 case WeightSensor.ECHO_CLASS_CODE:
return new WeightSensor.Proxy(instanceCode);
267 case AirCleaner.ECHO_CLASS_CODE:
return new AirCleaner.Proxy(instanceCode);
268 case AirConditionerVentilationFan.ECHO_CLASS_CODE:
return new AirConditionerVentilationFan.Proxy(instanceCode);
269 case ElectricHeater.ECHO_CLASS_CODE:
return new ElectricHeater.Proxy(instanceCode);
270 case FanHeater.ECHO_CLASS_CODE:
return new FanHeater.Proxy(instanceCode);
271 case HomeAirConditioner.ECHO_CLASS_CODE:
return new HomeAirConditioner.Proxy(instanceCode);
272 case Humidifier.ECHO_CLASS_CODE:
return new Humidifier.Proxy(instanceCode);
273 case PackageTypeCommercialAirConditionerIndoorUnit.ECHO_CLASS_CODE:
return new PackageTypeCommercialAirConditionerIndoorUnit.Proxy(instanceCode);
274 case PackageTypeCommercialAirConditionerOutdoorUnit.ECHO_CLASS_CODE:
return new PackageTypeCommercialAirConditionerOutdoorUnit.Proxy(instanceCode);
275 case VentilationFan.ECHO_CLASS_CODE:
return new VentilationFan.Proxy(instanceCode);
276 case BathroomHeaterAndDryer.ECHO_CLASS_CODE:
return new BathroomHeaterAndDryer.Proxy(instanceCode);
277 case Battery.ECHO_CLASS_CODE:
return new Battery.Proxy(instanceCode);
278 case Buzzer.ECHO_CLASS_CODE:
return new Buzzer.Proxy(instanceCode);
279 case ColdOrHotWaterHeatSourceEquipment.ECHO_CLASS_CODE:
return new ColdOrHotWaterHeatSourceEquipment.Proxy(instanceCode);
280 case ElectricallyOperatedShade.ECHO_CLASS_CODE:
return new ElectricallyOperatedShade.Proxy(instanceCode);
281 case ElectricLock.ECHO_CLASS_CODE:
return new ElectricLock.Proxy(instanceCode);
282 case ElectricShutter.ECHO_CLASS_CODE:
return new ElectricShutter.Proxy(instanceCode);
283 case ElectricStormWindow.ECHO_CLASS_CODE:
return new ElectricStormWindow.Proxy(instanceCode);
284 case ElectricToiletSeat.ECHO_CLASS_CODE:
return new ElectricToiletSeat.Proxy(instanceCode);
285 case ElectricVehicle.ECHO_CLASS_CODE:
return new ElectricVehicle.Proxy(instanceCode);
286 case ElectricWaterHeater.ECHO_CLASS_CODE:
return new ElectricWaterHeater.Proxy(instanceCode);
287 case EngineCogeneration.ECHO_CLASS_CODE:
return new EngineCogeneration.Proxy(instanceCode);
288 case FloorHeater.ECHO_CLASS_CODE:
return new FloorHeater.Proxy(instanceCode);
289 case FuelCell.ECHO_CLASS_CODE:
return new FuelCell.Proxy(instanceCode);
290 case GasMeter.ECHO_CLASS_CODE:
return new GasMeter.Proxy(instanceCode);
291 case GeneralLighting.ECHO_CLASS_CODE:
return new GeneralLighting.Proxy(instanceCode);
292 case HouseholdSolarPowerGeneration.ECHO_CLASS_CODE:
return new HouseholdSolarPowerGeneration.Proxy(instanceCode);
293 case InstantaneousWaterHeater.ECHO_CLASS_CODE:
return new InstantaneousWaterHeater.Proxy(instanceCode);
294 case LPGasMeter.ECHO_CLASS_CODE:
return new LPGasMeter.Proxy(instanceCode);
295 case PowerDistributionBoardMetering.ECHO_CLASS_CODE:
return new PowerDistributionBoardMetering.Proxy(instanceCode);
296 case SmartElectricEnergyMeter.ECHO_CLASS_CODE:
return new SmartElectricEnergyMeter.Proxy(instanceCode);
297 case SmartGasMeter.ECHO_CLASS_CODE:
return new SmartGasMeter.Proxy(instanceCode);
298 case Sprinkler.ECHO_CLASS_CODE:
return new Sprinkler.Proxy(instanceCode);
299 case WaterFlowmeter.ECHO_CLASS_CODE:
return new WaterFlowmeter.Proxy(instanceCode);
300 case WattHourMeter.ECHO_CLASS_CODE:
return new WattHourMeter.Proxy(instanceCode);
301 case ClothesDryer.ECHO_CLASS_CODE:
return new ClothesDryer.Proxy(instanceCode);
302 case CombinationMicrowaveOven.ECHO_CLASS_CODE:
return new CombinationMicrowaveOven.Proxy(instanceCode);
303 case CookingHeater.ECHO_CLASS_CODE:
return new CookingHeater.Proxy(instanceCode);
304 case ElectricHotWaterPot.ECHO_CLASS_CODE:
return new ElectricHotWaterPot.Proxy(instanceCode);
305 case Refrigerator.ECHO_CLASS_CODE:
return new Refrigerator.Proxy(instanceCode);
306 case RiceCooker.ECHO_CLASS_CODE:
return new RiceCooker.Proxy(instanceCode);
307 case WasherAndDryer.ECHO_CLASS_CODE:
return new WasherAndDryer.Proxy(instanceCode);
308 case WashingMachine.ECHO_CLASS_CODE:
return new WashingMachine.Proxy(instanceCode);
309 case Weighing.ECHO_CLASS_CODE:
return new Weighing.Proxy(instanceCode);
310 case Controller.ECHO_CLASS_CODE:
return new Controller.Proxy(instanceCode);
311 case Switch.ECHO_CLASS_CODE:
return new Switch.Proxy(instanceCode);
312 case Display.ECHO_CLASS_CODE:
return new Display.Proxy(instanceCode);
313 case Television.ECHO_CLASS_CODE:
return new Television.Proxy(instanceCode);
314 default:
return new DeviceObject.Proxy(echoClassCode, instanceCode);
318 mProxyCreators.put(echoClassCode, creator);
321 mProxyCreators.remove(echoClassCode);
324 public static interface DeviceProxyCreator {
DeviceObject addOtherDevice(short echoClassCode, byte echoInstanceCode)
DeviceObject getDevice(byte classGroupCode, byte classCode, byte instanceCode)
static final String SELF_ADDRESS
NodeProfile getNodeProfile()
void removeDevice(DeviceObject device)
DeviceObject[] getDevices()
DeviceObject[] getDevices(short echoClassCode)
boolean containsInstance(short echoClassCode, byte echoInstanceCode)
static void putDeviceProxyCreator(short echoClassCode, DeviceProxyCreator creator)
EchoObject getInstance(byte classGroupCode, byte classCode, byte instanceCode)
static void removeDeviceProxyCreator(short echoClassCode)
void addDevice(DeviceObject device)
boolean containsDevice(DeviceObject device)
boolean containsDevice(short echoClassCode, byte echoInstanceCode)
static short getEchoClassCode(byte classGroupCode, byte classCode)
DeviceObject getDevice(short echoClassCode, byte echoInstanceCode)
EchoObject getInstance(short echoClassCode, byte echoInstanceCode)
DeviceObject[] getDevices(byte classGroupCode, byte classCode)
EchoNode(NodeProfile nodeProfile, DeviceObject[] devices)
boolean containsInstance(byte classGroupCode, byte classCode, byte instanceCode)