/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see
"a", "b", "c", "x"* The property can also be null as in
"a", "b", "c", null* * @param namespaceUri the key namespace to use. If left null then the * {@link #REGISTRY_1_0_URI default} will be used. * @param key the path elements followed by the property name. */ public RegistryKey(String namespaceUri, String... key) { if (namespaceUri == null) { namespaceUri = REGISTRY_1_0_URI; } this.namespaceUri = namespaceUri; // The last value is the property int length = key.length; if (length == 0) { throw new IllegalArgumentException("No value supplied for the RegistryKey property"); } this.property = key[length - 1]; this.path = new String[length - 1]; System.arraycopy(key, 0, path, 0, length - 1); } /** * A constructor to specifically declare the path and property portions of the key. * * @param namespaceUri the key namespace to use. If left null then the * {@link #REGISTRY_1_0_URI default} will be used. * @param path the path part of the key * @param property the property name for the key. This may be null. */ public RegistryKey(String namespaceUri, String[] path, String property) { if (namespaceUri == null) { namespaceUri = REGISTRY_1_0_URI; } this.namespaceUri = namespaceUri; if ((path == null || path.length == 0) && property == null) { throw new IllegalArgumentException("No path or property supplied for the RegistryKey"); } this.property = property; this.path = path; } @Override public String toString() { StringBuilder sb = new StringBuilder(128); sb.append("RegistryKey") .append("[ ").append(RegistryKey.buildPathString(path)).append("/").append(property) .append(" ]"); return sb.toString(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RegistryKey other = (RegistryKey) obj; if (namespaceUri == null) { if (other.namespaceUri != null) return false; } else if (!namespaceUri.equals(other.namespaceUri)) return false; if (!Arrays.equals(path, other.path)) return false; if (property == null) { if (other.property != null) return false; } else if (!property.equals(other.property)) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((namespaceUri == null) ? 0 : namespaceUri.hashCode()); result = prime * result + Arrays.hashCode(path); result = prime * result + ((property == null) ? 0 : property.hashCode()); return result; } public String getNamespaceUri() { return namespaceUri; } public String[] getPath() { return path; } public String getProperty() { return property; } }