public AbstractAppController(final Class unitClass, final ServiceFactory serviceFactory) throws org.openbase.jul.exception.InstantiationException { super(unitClass, AppData.newBuilder()); this.serviceFactory = serviceFactory; }
@Override public ActivationState getActivationState() throws NotAvailableException { return getData().getActivationState(); } }
@Override public List<UnitConfig> getAppConfigsByAppClass(AppClass appClass) throws CouldNotPerformException, InterruptedException { return getAppConfigsByAppClassId(appClass.getId()); }
@Override public void processData(final String id, final IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, final ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, final ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification { AppConfig appConfig = entry.getMessage().getAppConfig(); if (!appConfig.hasAppClassId() || appConfig.getAppClassId().isEmpty()) { throw new NotAvailableException("appclass.id"); } // get throws a CouldNotPerformException if the agent class with the id does not exists appClassRegistry.get(appConfig.getAppClassId()); } }
private String getAppClass(final UnitConfig appUnitConfig) throws InterruptedException, NotAvailableException { try { Registries.getAppRegistry().waitForData(); AppClass appClass = Registries.getAppRegistry().getAppClassById(appUnitConfig.getAppConfig().getAppClassId()); return AbstractAppController.class.getPackage().getName() + "." + "preset." + appClass.getLabel() + "App"; } catch (CouldNotPerformException ex) { throw new NotAvailableException("AppClass", ex); } } }
@Override public List<UnitConfig> getAppConfigsByAppClassId(String appClassId) throws CouldNotPerformException, InterruptedException { if (!containsAppClassById(appClassId)) { throw new NotAvailableException("appClassId [" + appClassId + "]"); } List<UnitConfig> appConfigs = new ArrayList<>(); for (UnitConfig appConfig : getAppConfigs()) { if (appConfig.getAppConfig().getAppClassId().equals(appClassId)) { appConfigs.add(appConfig); } } return appConfigs; }
break; case APP: final AppClass appClass = Registries.getAppRegistry().getAppClassById(hostUnitConfig.getAppConfig().getAppClassId()); configPool.register(new MetaConfigVariableProvider("AppBindingConfig", appClass.getBindingConfig().getMetaConfig())); configPool.register(new MetaConfigVariableProvider("AppClassMetaConfig", appClass.getMetaConfig())); configPool.register(new ProtobufVariableProvider(appClass)); break;
@Override public void processData(String id, IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification { UnitConfig.Builder unitConfig = entry.getMessage().toBuilder(); UnitConfigProcessor.verifyUnit(unitConfig.build()); switch (unitConfig.getType()) { case APP: if (!unitConfig.getAppConfig().hasAutostart()) { unitConfig.getAppConfigBuilder().setAutostart(DEFAULT_AUTOSTART_STATE); throw new EntryModification(entry.setMessage(unitConfig), this); } break; case AGENT: if (!unitConfig.getAgentConfig().hasAutostart()) { unitConfig.getAgentConfigBuilder().setAutostart(DEFAULT_AUTOSTART_STATE); throw new EntryModification(entry.setMessage(unitConfig), this); } break; default: throw new NotSupportedException(unitConfig.getType(), getClass()); } } }
@Override protected boolean isAutostartEnabled() throws CouldNotPerformException { return getConfig().getAppConfig().getAutostart(); } }
hostUnitIdList = unitHostConfig.getDeviceConfig().getUnitIdList(); } else if(unitHostConfig.getType() == UnitType.APP) { hostUnitIdList = unitHostConfig.getAppConfig().getUnitIdList();
@Override public void processData(final String id, final IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, final ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification { UnitConfig appUnitConfig = entry.getMessage(); if (!appUnitConfig.hasPlacementConfig()) { throw new NotAvailableException("agent.placementConfig"); } if (!appUnitConfig.getPlacementConfig().hasLocationId() || appUnitConfig.getPlacementConfig().getLocationId().isEmpty()) { throw new NotAvailableException("app.placementConfig.locationId"); } if (!appUnitConfig.getAppConfig().hasAppClassId() || appUnitConfig.getAppConfig().getAppClassId().isEmpty()) { throw new NotAvailableException("app.appClassId"); } Scope newScope = ScopeGenerator.generateAppScope(appUnitConfig, appClassRegistry.get(appUnitConfig.getAppConfig().getAppClassId()).getMessage(), locationRegistry.getMessage(appUnitConfig.getPlacementConfig().getLocationId())); // verify and update scope if (!ScopeGenerator.generateStringRep(appUnitConfig.getScope()).equals(ScopeGenerator.generateStringRep(newScope))) { if (appMap.containsKey(ScopeGenerator.generateStringRep(newScope))) { throw new InvalidStateException("Two apps [" + appUnitConfig + "][" + appMap.get(ScopeGenerator.generateStringRep(newScope)) + "] are registered with the same label and location"); } else { appMap.put(ScopeGenerator.generateStringRep(newScope), appUnitConfig); entry.setMessage(appUnitConfig.toBuilder().setScope(newScope)); throw new EntryModification(entry, this); } } }
@Override public List<UnitConfig> getAppConfigsByAppClassId(String appClassId) throws CouldNotPerformException, InterruptedException { if (!containsAppClassById(appClassId)) { throw new NotAvailableException("appClassId [" + appClassId + "]"); } unitRegistryRemote.validateData(); List<UnitConfig> appConfigs = new ArrayList<>(); for (UnitConfig appConfig : getAppConfigs()) { if (appConfig.getAppConfig().getAppClassId().equals(appClassId)) { appConfigs.add(appConfig); } } return appConfigs; }
@Override public AppRemote newInstance(final UnitConfig config) throws org.openbase.jul.exception.InstantiationException, InterruptedException { try { AppRemote appRemote = Units.getUnit(config, false, Units.APP); appRemote.addDataObserver((final Observable<AppData> source, AppData data) -> { openHABRemote.postUpdate(OpenHABCommandFactory.newOnOffCommand(data.getActivationState()).setItem(generateItemId(config)).build()); }); return appRemote; } catch (CouldNotPerformException ex) { throw new org.openbase.jul.exception.InstantiationException(AppRemote.class, ex); } }
@Override public List<UnitConfig> getAppConfigsByAppClass(AppClass appClass) throws CouldNotPerformException, InterruptedException { return getAppConfigsByAppClassId(appClass.getId()); }