/** * Copyright 2009 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.safehaus.penrose.directory; import java.util.*; import java.io.Serializable; /** * @author Endi S. Dewata */ public class EntrySourceConfig implements Serializable, Cloneable { public final static long serialVersionUID = 1L; public final static String REQUIRED = "required"; public final static String REQUISITE = "requisite"; public final static String SUFFICIENT = "sufficient"; public final static String IGNORE = "ignore"; public final static String OPTIONAL = "optional"; public final static String FILTER = "filter"; public String alias; public String partitionName; public String sourceName; public String mappingName; public Map<String,Collection<EntryFieldConfig>> fieldConfigs = new LinkedHashMap<String,Collection<EntryFieldConfig>>(); public Map<String,String> parameters = new LinkedHashMap<String,String>(); public boolean readOnly = false; public String search; public String bind; public String add; public String delete; public String modify; public String modrdn; public Integer searchOrder; public Integer bindOrder; public Integer addOrder; public Integer deleteOrder; public Integer modifyOrder; public Integer modrdnOrder; public EntrySourceConfig() { } public EntrySourceConfig(String sourceName) { this.sourceName = sourceName; } public EntrySourceConfig(String alias, String sourceName) { this.alias = alias; this.sourceName = sourceName; } public EntrySourceConfig(String alias, String partitionName, String sourceName) { this.alias = alias; this.partitionName = partitionName; this.sourceName = sourceName; } public String getAlias() { return alias; } public void setAlias(String alias) { this.alias = alias; } public Collection<EntryFieldConfig> getFieldConfigs(String name) { return fieldConfigs.get(name.toLowerCase()); } public Collection<EntryFieldConfig> getFieldConfigs() { Collection<EntryFieldConfig> results = new ArrayList<EntryFieldConfig>(); for (Collection<EntryFieldConfig> list : fieldConfigs.values()) { results.addAll(list); } return results; } public void setFieldConfigs(Collection<EntryFieldConfig> fieldConfigs) { this.fieldConfigs.clear(); for (EntryFieldConfig fieldConfig : fieldConfigs) { addFieldConfig(fieldConfig); } } public void addFieldConfig(EntryFieldConfig fieldConfig) { String name = fieldConfig.getName().toLowerCase(); Collection<EntryFieldConfig> list = fieldConfigs.get(name); if (list == null) { list = new ArrayList<EntryFieldConfig>(); fieldConfigs.put(name, list); } list.add(fieldConfig); } public void removeFieldConfigs(String name) { fieldConfigs.remove(name.toLowerCase()); } public void removeFieldConfig(EntryFieldConfig fieldConfig) { Collection<EntryFieldConfig> list = getFieldConfigs(fieldConfig.getName()); if (list == null) return; list.remove(fieldConfig); if (list.isEmpty()) removeFieldConfigs(fieldConfig.getName()); } public void removeFieldConfigs() { fieldConfigs.clear(); } public String getPartitionName() { return partitionName; } public void setPartitionName(String partitionName) { this.partitionName = partitionName; } public String getSourceName() { return sourceName == null ? alias : sourceName; } public void setSourceName(String sourceName) { this.sourceName = sourceName; } public String getMappingName() { return mappingName; } public void setMappingName(String mappingName) { this.mappingName = mappingName; } public Map<String,String> getParameters() { return parameters; } public String getParameter(String name) { return parameters.get(name); } public void removeParameters() { parameters.clear(); } public void setParameter(String name, String value) { parameters.put(name, value); } public void removeParameter(String name) { parameters.remove(name); } public Collection<String> getParameterNames() { return parameters.keySet(); } public boolean isReadOnly() { return readOnly; } public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } public int hashCode() { return (alias == null ? 0 : alias.hashCode()) + (partitionName == null ? 0 : partitionName.hashCode()) + (sourceName == null ? 0 : sourceName.hashCode()); } boolean equals(Object o1, Object o2) { if (o1 == null && o2 == null) return true; if (o1 != null) return o1.equals(o2); return o2.equals(o1); } public boolean equals(Object object) { if (this == object) return true; if (object == null) return false; if (object.getClass() != this.getClass()) return false; EntrySourceConfig sourceConfig = (EntrySourceConfig)object; if (!equals(alias, sourceConfig.alias)) return false; if (!equals(partitionName, sourceConfig.partitionName)) return false; if (!equals(sourceName, sourceConfig.sourceName)) return false; if (!equals(mappingName, sourceConfig.mappingName)) return false; if (!equals(fieldConfigs, sourceConfig.fieldConfigs)) return false; if (!equals(parameters, sourceConfig.parameters)) return false; if (readOnly != sourceConfig.readOnly) return false; if (!equals(search, sourceConfig.search)) return false; if (!equals(bind, sourceConfig.bind)) return false; if (!equals(add, sourceConfig.add)) return false; if (!equals(delete, sourceConfig.delete)) return false; if (!equals(modify, sourceConfig.modify)) return false; if (!equals(modrdn, sourceConfig.modrdn)) return false; if (!equals(searchOrder, sourceConfig.searchOrder)) return false; if (!equals(bindOrder, sourceConfig.bindOrder)) return false; if (!equals(addOrder, sourceConfig.addOrder)) return false; if (!equals(deleteOrder, sourceConfig.deleteOrder)) return false; if (!equals(modifyOrder, sourceConfig.modifyOrder)) return false; if (!equals(modrdnOrder, sourceConfig.modrdnOrder)) return false; return true; } public void copy(EntrySourceConfig sourceConfig) throws CloneNotSupportedException { alias = sourceConfig.alias; partitionName = sourceConfig.partitionName; sourceName = sourceConfig.sourceName; mappingName = sourceConfig.mappingName; fieldConfigs = new LinkedHashMap<String,Collection<EntryFieldConfig>>(); for (Collection<EntryFieldConfig> list : sourceConfig.fieldConfigs.values()) { for (EntryFieldConfig fieldConfig : list) { addFieldConfig((EntryFieldConfig) fieldConfig.clone()); } } parameters = new LinkedHashMap<String,String>(); parameters.putAll(sourceConfig.parameters); readOnly = sourceConfig.readOnly; search = sourceConfig.search; bind = sourceConfig.bind; add = sourceConfig.add; delete = sourceConfig.delete; modify = sourceConfig.modify; modrdn = sourceConfig.modrdn; searchOrder = sourceConfig.searchOrder; bindOrder = sourceConfig.bindOrder; addOrder = sourceConfig.addOrder; deleteOrder = sourceConfig.deleteOrder; modifyOrder = sourceConfig.modifyOrder; modrdnOrder = sourceConfig.modrdnOrder; } public Object clone() throws CloneNotSupportedException { EntrySourceConfig sourceConfig = (EntrySourceConfig)super.clone(); sourceConfig.copy(this); return sourceConfig; } public String getBind() { return bind; } public void setBind(String bind) { this.bind = bind; } public String getAdd() { return add; } public void setAdd(String add) { this.add = add; } public String getDelete() { return delete; } public void setDelete(String delete) { this.delete = delete; } public String getModify() { return modify; } public void setModify(String modify) { this.modify = modify; } public String getModrdn() { return modrdn; } public void setModrdn(String modrdn) { this.modrdn = modrdn; } public String getSearch() { return search; } public void setSearch(String search) { this.search = search; } public Integer getSearchOrder() { return searchOrder; } public void setSearchOrder(Integer searchOrder) { this.searchOrder = searchOrder; } public void setSearchOrder(String searchOrder) { this.searchOrder = Integer.parseInt(searchOrder); } public Integer getBindOrder() { return bindOrder; } public void setBindOrder(Integer bindOrder) { this.bindOrder = bindOrder; } public void setBindOrder(String bindOrder) { this.bindOrder = Integer.parseInt(bindOrder); } public Integer getAddOrder() { return addOrder; } public void setAddOrder(Integer addOrder) { this.addOrder = addOrder; } public void setAddOrder(String addOrder) { this.addOrder = Integer.parseInt(addOrder); } public Integer getDeleteOrder() { return deleteOrder; } public void setDeleteOrder(Integer deleteOrder) { this.deleteOrder = deleteOrder; } public void setDeleteOrder(String deleteOrder) { this.deleteOrder = Integer.parseInt(deleteOrder); } public Integer getModifyOrder() { return modifyOrder; } public void setModifyOrder(Integer modifyOrder) { this.modifyOrder = modifyOrder; } public void setModifyOrder(String modifyOrder) { this.modifyOrder = Integer.parseInt(modifyOrder); } public Integer getModrdnOrder() { return modrdnOrder; } public void setModrdnOrder(Integer modrdnOrder) { this.modrdnOrder = modrdnOrder; } public void setModrdnOrder(String modrdnOrder) { this.modrdnOrder = Integer.parseInt(modrdnOrder); } }