private void merge(ConfigurationChanges diffs, Collection<TransferCapability> prevs, Collection<TransferCapability> tcs, String aeDN) throws NamingException { for (TransferCapability tc : prevs) { String dn = dnOf(tc, aeDN); if (findByDN(aeDN, tcs, dn) == null) { destroySubcontext(dn); ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.D); } } for (TransferCapability tc : tcs) { String dn = dnOf(tc, aeDN); TransferCapability prev = findByDN(aeDN, prevs, dn); if (prev == null) { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.C); createSubcontext(dn, storeTo(ConfigurationChanges.nullifyIfNotVerbose(diffs, ldapObj), tc, new BasicAttributes(true))); } else { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.U); modifyAttributes(dn, storeDiffs(ldapObj, prev, tc, new ArrayList<ModificationItem>())); ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj); } } }
public NamingEnumeration<SearchResult> search(String deviceName, String[] attrsArray, String filter) throws NamingException { return deviceName != null ? search(deviceRef(deviceName), filter, attrsArray) : ctx.search(devicesDN, filter, searchControlSubtreeScope(0, attrsArray, true)); }
@Override public synchronized boolean purgeConfiguration() throws ConfigurationException { if (!configurationExists()) return false; try { destroySubcontextWithChilds(configurationDN); LOG.info("Purge DICOM Configuration at {}", configurationDN); clearConfigurationDN(); } catch (NamingException e) { throw new ConfigurationException(e); } return true; }
@Override public ConfigurationChanges merge(Device device, EnumSet<Option> options) throws ConfigurationException { ConfigurationChanges diffs = configurationChangesOf(options); merge(device, options, diffs); return diffs; }
private void mergeForwardRules(List<ForwardRule> prevs, List<ForwardRule> rules, String parentDN) throws NamingException { for (ForwardRule prev : prevs) if (!rules.contains(prev)) config.destroySubcontext(dnOfForwardRule(prev, parentDN)); for (ForwardRule rule : rules) { String dn = dnOfForwardRule(rule, parentDN); Integer indexOfPrevRule = prevs.indexOf(rule); if (indexOfPrevRule == -1) config.createSubcontext(dn, storeToForwardRule(rule, new BasicAttributes(true))); else config.modifyAttributes(dn, storeForwardRuleDiffs(prevs.get(indexOfPrevRule), rule, new ArrayList<ModificationItem>())); } }
public void merge(ConfigurationChanges diffs, Map<String,BasicBulkDataDescriptor> prevs, Map<String,BasicBulkDataDescriptor> descriptors, String parentDN) throws NamingException { for (String prevBulkDataDescriptorID : prevs.keySet()) { if (!descriptors.containsKey(prevBulkDataDescriptorID)) { String dn = LdapUtils.dnOf("dcmBulkDataDescriptorID", prevBulkDataDescriptorID, parentDN); destroySubcontext(dn); ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.D); } } for (Map.Entry<String, BasicBulkDataDescriptor> entry : descriptors.entrySet()) { String dn = LdapUtils.dnOf("dcmBulkDataDescriptorID", entry.getKey(), parentDN); BasicBulkDataDescriptor prev = prevs.get(entry.getKey()); if (prev == null) { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.C); createSubcontext(dn, storeTo(ldapObj, prev, new BasicAttributes(true))); } else { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.U); modifyAttributes(dn, storeDiffs(ldapObj, prev, entry.getValue(), new ArrayList<ModificationItem>())); ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj); } } }
private void mergeAEs(ConfigurationChanges diffs, Device prevDev, Device dev, String deviceDN, boolean preserveVendorData) throws NamingException { Collection<String> aets = dev.getApplicationAETitles(); for (String aet : prevDev.getApplicationAETitles()) { if (!aets.contains(aet)) { String aetDN = aetDN(aet, deviceDN); destroySubcontextWithChilds(aetDN); ConfigurationChanges.addModifiedObject(diffs, aetDN, ConfigurationChanges.ChangeType.D); } } Collection<String> prevAETs = prevDev.getApplicationAETitles(); for (ApplicationEntity ae : dev.getApplicationEntities()) { String aet = ae.getAETitle(); if (!prevAETs.contains(aet)) { store(diffs, ae, deviceDN); } else merge(diffs, prevDev.getApplicationEntity(aet), ae, deviceDN, preserveVendorData); } }
@Override public ConfigurationChanges updateDeviceVendorData(String deviceName, byte[]... vendorData) throws ConfigurationException { String deviceRef = deviceRef(deviceName); if (!configurationExists()) throw new ConfigurationNotFoundException(); ConfigurationChanges diffs = new ConfigurationChanges(false); try { Attributes attrs = getAttributes(deviceRef, new String[]{"dicomVendorData"}); byte[][] prev = byteArrays(attrs.get("dicomVendorData")); ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, deviceRef, ConfigurationChanges.ChangeType.C); List<ModificationItem> mods = new ArrayList<>(1); storeDiff(ldapObj, mods, "dicomVendorData", prev, vendorData); modifyAttributes(deviceRef, mods); } catch (NameNotFoundException e) { throw new ConfigurationNotFoundException("Device with specified name not found", e); } catch (NamingException e) { throw new ConfigurationException(e); } return diffs; }
private void storeForwardOptions(HashMap<String, ForwardOption> fwdOptions, String parentDN) throws NamingException { for (Entry<String, ForwardOption> forwardOptionEntry : fwdOptions.entrySet()) config.createSubcontext(dnOfForwardOption(forwardOptionEntry.getKey(), parentDN), storeToForwardOption(forwardOptionEntry, new BasicAttributes(true))); }
private Device findDevice() throws ConfigurationException { String appName = System.getProperty(APP_NAME_PROPERTY, DEF_APP_NAME); String key = appName + ".DeviceName"; String name = System.getProperty(key, DEF_DEVICE_NAME); try ( LdapDicomConfiguration conf = new LdapDicomConfiguration(loadProperties(envURL(appName)))) { conf.addDicomConfigurationExtension(new LdapAuditLoggerConfiguration()); conf.addDicomConfigurationExtension(new LdapAuditRecordRepositoryConfiguration()); return conf.findDevice(name); } catch (ConfigurationNotFoundException e) { LOG.error("Missing Configuration for Device '{}' - you may change the Device name by System Property '{}'", name, key); throw e; } }
@Override protected void mergeChilds(ConfigurationChanges diffs, Device prev, Device device, String deviceDN) throws NamingException { AuditRecordRepository prevARR = prev.getDeviceExtension(AuditRecordRepository.class); AuditRecordRepository arr = device.getDeviceExtension(AuditRecordRepository.class); if (arr == null && prevARR == null) return; String dn = CN_AUDIT_RECORD_REPOSITORY + deviceDN; if (arr == null) { config.destroySubcontextWithChilds(dn); ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.D); } else if (prevARR == null) { store(diffs, deviceDN, arr); } else { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.U); config.modifyAttributes(dn, storeDiffs(ldapObj, prevARR, arr, deviceDN, new ArrayList<ModificationItem>())); ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj); } }
private void merge(ConfigurationChanges diffs, ApplicationEntity prev, ApplicationEntity ae, String deviceDN, boolean preserveVendorData) throws NamingException { String aeDN = aetDN(ae.getAETitle(), deviceDN); ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, aeDN, ConfigurationChanges.ChangeType.U); modifyAttributes(aeDN, storeDiffs(ldapObj, prev, ae, deviceDN, new ArrayList<ModificationItem>(), preserveVendorData)); ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj); mergeChilds(diffs, prev, ae, aeDN); }
private void store(ConfigurationChanges diffs, ApplicationEntity ae, String deviceDN) throws NamingException { String aeDN = aetDN(ae.getAETitle(), deviceDN); ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, aeDN, ConfigurationChanges.ChangeType.C); createSubcontext(aeDN, storeTo(ConfigurationChanges.nullifyIfNotVerbose(diffs, ldapObj), ae, deviceDN, new BasicAttributes(true))); storeChilds(ConfigurationChanges.nullifyIfNotVerbose(diffs, diffs), aeDN, ae); }
@Override public byte[][] loadDeviceVendorData(String deviceName) throws ConfigurationException { if (!configurationExists()) throw new ConfigurationNotFoundException(); try { Attributes attrs = getAttributes(deviceRef(deviceName), new String[]{ "dicomVendorData" }); return byteArrays(attrs.get("dicomVendorData")); } catch (NameNotFoundException e) { throw new ConfigurationNotFoundException("Device with specified name not found", e); } catch (NamingException e) { throw new ConfigurationException(e); } }
String imageWritersDN = CN_IMAGE_WRITER_FACTORY + deviceDN; try { config.getAttributes(imageWritersDN); } catch (NameNotFoundException e) { return; config.search(imageWritersDN, "(objectclass=dcmImageWriter)"); try { while (ne.hasMore()) {
public NamingEnumeration<SearchResult> search(String dn, String filter) throws NamingException { return search(dn, filter, (String[]) null); }
public void addNetworkAE() throws ConfigurationException { Device device = conf.findDevice(deviceName); device.addConnection(conn); ApplicationEntity ae = new ApplicationEntity(aeTitle); device.addApplicationEntity(ae); ae.setDescription(aeDesc); ae.addConnection(conn); conf.merge(device, EnumSet.of(DicomConfiguration.Option.REGISTER)); }
private void merge(ConfigurationChanges diffs, WebApplication prev, WebApplication webapp, String deviceDN) throws NamingException { String webappDN = webappDN(webapp.getApplicationName(), deviceDN); ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, webappDN, ConfigurationChanges.ChangeType.U); modifyAttributes(webappDN, storeDiffs(ldapObj, prev, webapp, deviceDN, new ArrayList<ModificationItem>())); ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj); }
private void storeChilds(ConfigurationChanges diffs, String aeDN, ApplicationEntity ae) throws NamingException { for (TransferCapability tc : ae.getTransferCapabilities()) { ConfigurationChanges.ModifiedObject ldapObj = ConfigurationChanges.addModifiedObject(diffs, aeDN, ConfigurationChanges.ChangeType.C); createSubcontext(dnOf(tc, aeDN), storeTo(ldapObj, tc, new BasicAttributes(true))); } if (extended) for (LdapDicomConfigurationExtension ext : extensions) ext.storeChilds(diffs, aeDN, ae); }
public synchronized void destroySubcontextWithChilds(String name) throws NamingException { NamingEnumeration<NameClassPair> list = ctx.list(name); try { while (list.hasMore()) destroySubcontextWithChilds(list.next().getNameInNamespace()); } finally { LdapUtils.safeClose(list); } ctx.destroySubcontext(name); }