/** * {@inheritDoc} * * @return {@inheritDoc} * @throws CouldNotPerformException {@inheritDoc} */ @Override public Boolean isAgentClassRegistryConsistent() throws CouldNotPerformException { return agentClassRegistry.isConsistent(); }
/** * {@inheritDoc} * * @param unitTemplate {@inheritDoc} * @return {@inheritDoc} * @throws CouldNotPerformException {@inheritDoc} */ @Override public Boolean containsUnitTemplate(final UnitTemplate unitTemplate) throws CouldNotPerformException { return unitTemplateRegistry.contains(unitTemplate); }
/** * {@inheritDoc} * * @return {@inheritDoc} * @throws CouldNotPerformException {@inheritDoc} */ @Override public List<UnitConfig> getDalUnitConfigs() throws CouldNotPerformException { return dalUnitConfigRegistry.getMessages(); }
protected void registerConsistencyHandler(final ConsistencyHandler consistencyHandler, final Class messageClass) throws CouldNotPerformException { for (ProtoBufFileSynchronizedRegistry registry : registryList) { if (messageClass.equals(registry.getMessageClass())) { registry.registerConsistencyHandler(consistencyHandler); } else { logger.debug("Registration of " + consistencyHandler.getClass().getSimpleName() + " skipped for " + registry + " because " + messageClass.getSimpleName() + " is not compatible."); } } }
/** * {@inheritDoc} * * @throws CouldNotPerformException {@inheritDoc} * @throws java.lang.InterruptedException {@inheritDoc} */ @Override public final void syncRegistryFlags() throws CouldNotPerformException, InterruptedException { setDataField(DeviceRegistryData.DEVICE_CLASS_REGISTRY_READ_ONLY_FIELD_NUMBER, deviceClassRegistry.isReadOnly()); setDataField(DeviceRegistryData.DEVICE_CLASS_REGISTRY_CONSISTENT_FIELD_NUMBER, deviceClassRegistry.isConsistent()); }
List<UnitConfig> unitConfigs = new ArrayList<>(); for (String unitId : deviceConfig.getUnitIdList()) { unitConfigs.add(dalUnitRegistry.getMessage(unitId)); deviceConfig.addUnitId(unitConfig.getId()); } else { dalUnitRegistry.remove(unitConfig); unitConfigs.remove(unitConfig); modification = true; dalUnitConfig = dalUnitRegistry.register(dalUnitConfig); deviceConfig.addUnitId(dalUnitConfig.getId()); modification = true; deviceUnitRegistry.update(deviceUnitConfig.build());
@Override public Future<AuthenticatedValue> registerUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).register(unitConfig), (UnitConfig unitConfig) -> { // If the unit has a location, use the location's UnitConfig for the permissions. if (unitConfig.hasPlacementConfig() && unitConfig.getPlacementConfig().hasLocationId()) { return getLocationUnitConfigRegistry().getMessage(unitConfig.getPlacementConfig().getLocationId()); } // Else, user the permission for the root location UnitConfig rootLocation = null; for (UnitConfig locationUnitConfig : getLocationUnitConfigRegistry().getMessages()) { if (locationUnitConfig.getLocationConfig().getRoot()) { rootLocation = locationUnitConfig; break; } } if (rootLocation == null) { // no root location yet available so use all rights PermissionConfig.Builder permissionConfig = PermissionConfig.newBuilder(); permissionConfig.setOtherPermission(Permission.newBuilder().setAccess(true).setRead(true).setWrite(true)); rootLocation = UnitConfig.newBuilder().setPermissionConfig(permissionConfig).build(); } return rootLocation; } ); }); }
locationUnitConfigRegistry.remove(unitConfig); connectionUnitConfigRegistry.remove(unitConfig); String parentId = entry.getMessage().getPlacementConfig().getLocationId(); for (ProtoBufFileSynchronizedRegistry<String, UnitConfig, UnitConfig.Builder, UnitRegistryData.Builder> unitConfigRegistry : unitConfigRegistryList) { for (UnitConfig unitConfig : unitConfigRegistry.getMessages()) { if (unitConfig.getPlacementConfig().getLocationId().equals(id)) { UnitConfig.Builder unitConfigBuilder = unitConfig.toBuilder(); unitConfigRegistry.update(unitConfigBuilder.build());
/** * {@inheritDoc} * * @param deviceClass * @return * @throws CouldNotPerformException */ @Override public Future<DeviceClass> updateDeviceClass(DeviceClass deviceClass) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> deviceClassRegistry.update(deviceClass)); }
/** * {@inheritDoc} * * @return * @throws CouldNotPerformException */ @Override public Boolean isUnitTemplateRegistryReadOnly() throws CouldNotPerformException { return unitTemplateRegistry.isReadOnly(); }
/** * {@inheritDoc} * * @param deviceClass * @return * @throws CouldNotPerformException */ @Override public Future<DeviceClass> removeDeviceClass(DeviceClass deviceClass) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> deviceClassRegistry.remove(deviceClass)); }
/** * {@inheritDoc} * * @param deviceClass {@inheritDoc} * @return {@inheritDoc} * @throws CouldNotPerformException {@inheritDoc} */ @Override public Future<DeviceClass> registerDeviceClass(DeviceClass deviceClass) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> deviceClassRegistry.register(deviceClass)); }
@Override public AgentClass getAgentClassById(String agentClassId) throws CouldNotPerformException { return agentClassRegistry.getMessage(agentClassId); } }
this.serviceTemplateRegistry = new ProtoBufFileSynchronizedRegistry<>(ServiceTemplate.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.SERVICE_TEMPLATE_FIELD_NUMBER), new ServiceTemplateIdGenerator(), JPService.getProperty(JPServiceTemplateDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.unitTemplateRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitTemplate.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.UNIT_TEMPLATE_FIELD_NUMBER), new UnitTemplateIdGenerator(), JPService.getProperty(JPUnitTemplateDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.dalUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.DAL_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPDalUnitConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.userUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.USER_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPUserConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.authorizationGroupUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.AUTHORIZATION_GROUP_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPAuthorizationGroupConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.deviceUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.DEVICE_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPDeviceConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.unitGroupUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.UNIT_GROUP_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPUnitGroupConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.locationUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.LOCATION_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPLocationConfigDatabaseDirectory.class).getValue(), new ProtoBufJSonFileProvider()); this.connectionUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.CONNECTION_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPConnectionConfigDatabaseDirectory.class).getValue(), new ProtoBufJSonFileProvider()); this.agentUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.AGENT_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPAgentConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.sceneUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.SCENE_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPSceneConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.appUnitConfigRegistry = new ProtoBufFileSynchronizedRegistry<>(UnitConfig.class, getBuilderSetup(), getDataFieldDescriptor(UnitRegistryData.APP_UNIT_CONFIG_FIELD_NUMBER), UNIT_ID_GENERATOR, JPService.getProperty(JPAppConfigDatabaseDirectory.class).getValue(), protoBufJSonFileProvider); this.unitConfigRegistryList.add(dalUnitConfigRegistry); this.unitConfigRegistryList.add(locationUnitConfigRegistry);
/** * Method returns the unit shape of the given unit referred by the id. * * If this unit configuration does not provide any shape information the shape of the unit host will be returned. * In case the unit host even does not provide any shape information and the unit is a device than the shape of the device class will be used. * * @param unitId the id to resolve the unit shape. * @return the shape representing the unit. * @throws NotAvailableException is thrown if the unit shape is not available or the resolution has been failed. */ private Shape getUnitShape(final String unitId) throws NotAvailableException { try { for (ProtoBufFileSynchronizedRegistry<String, UnitConfig, UnitConfig.Builder, UnitRegistryData.Builder> registry : unitConfigRegistryList) { if (registry.contains(unitId)) { return getUnitShape(registry.getMessage(unitId)); } } throw new NotAvailableException("Unit with id["+unitId+"]"); } catch (final CouldNotPerformException ex) { throw new NotAvailableException("Shape", "of unit " + unitId, ex); } }
if (unitConfig.getBoundToUnitHost()) { try { UnitConfig deviceUnitConfig = deviceRegistry.getMessage(unitConfig.getUnitHostId()); PlacementConfig unitPlacement = unitConfig.getPlacementConfig(); PlacementConfig.Builder devicePlacement = deviceUnitConfig.toBuilder().getPlacementConfigBuilder(); deviceRegistry.update(deviceUnitConfig.toBuilder().setPlacementConfig(devicePlacement).build());
@Override public void init(ProtoBufRegistry<String, ServiceTemplate, ServiceTemplate.Builder> config) throws InitializationException, InterruptedException { try { ServiceTemplate template; // create missing unit template if (registry.size() <= ServiceType.values().length - 1) { for (ServiceType serviceType : ServiceType.values()) { if (serviceType == ServiceType.UNKNOWN) { continue; } template = ServiceTemplate.newBuilder().setType(serviceType).build(); if (!containsServiceTemplateByType(serviceType)) { registry.register(template); } } } } catch (CouldNotPerformException ex) { throw new InitializationException("Could not init " + getClass().getSimpleName() + "!", ex); } }
@Override public Future<AuthenticatedValue> updateUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).update(unitConfig), (UnitConfig unitConfig) -> getUnitConfigById(unitConfig.getId()) ); }); }
@Override public Future<AuthenticatedValue> removeUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).remove(unitConfig), (UnitConfig unitConfig) -> getUnitConfigById(unitConfig.getId()) ); }); }
/** * {@inheritDoc} * * @throws CouldNotPerformException {@inheritDoc} */ @Override protected void registerConsistencyHandler() throws CouldNotPerformException { userActivityConfigRegistry.registerConsistencyHandler(new UserActivityConfigClassIdConsistencyHandler(userActivityClassRegistry)); }