| /** |
| * |
| * Copyright 2004 The Apache Software Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.ws.scout.util; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| import java.util.Map; |
| import java.util.StringTokenizer; |
| |
| import javax.xml.registry.JAXRException; |
| import javax.xml.registry.infomodel.ClassificationScheme; |
| import javax.xml.registry.infomodel.Concept; |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.ws.scout.registry.infomodel.ClassificationSchemeImpl; |
| import org.apache.ws.scout.registry.infomodel.ConceptImpl; |
| import org.apache.ws.scout.registry.infomodel.InternationalStringImpl; |
| import org.apache.ws.scout.registry.infomodel.KeyImpl; |
| |
| /** |
| * Helper class that deals with predefined enumerations |
| * |
| * @author Anil Saldhana <anil@apache.org> |
| * @author Kurt Stam <kstam@apache.org> |
| * |
| */ |
| public class EnumerationHelper |
| { |
| private static Log log = LogFactory.getLog(EnumerationHelper.class); |
| |
| |
| private final static String UDDI_ORG_TYPES = "C1ACF26D-9672-4404-9D70-39B756E62AB4"; |
| private final static String OBJECT_TYPE = "ObjectType"; |
| private final static String ASSOCIATION_TYPE = "AssociationType"; |
| private final static String URL_TYPE = "URLType"; |
| private final static String PHONE_TYPE = "PhoneType"; |
| private final static String POSTAL_ADDRESS_ATTRIBUTES_STR = "PostalAddressAttributes"; |
| private final static String[] TYPES = {OBJECT_TYPE, ASSOCIATION_TYPE, URL_TYPE, PHONE_TYPE, POSTAL_ADDRESS_ATTRIBUTES_STR}; |
| |
| private final static String[] OBJECT_TYPES = { |
| "ExternalLink","Package","ExternalId","Association","Classification","Concept", |
| "AuditableEvent","User","Organization","CPA","CPP","Service","ServiceBinding","Process","WSDL", |
| "ExtrinsicObj","Organization","User"}; |
| private final static String[] ASSOCIATION_TYPES = { |
| "RelatedTo","ExternallyLinks","Contains","Extends","Implements", |
| "InstanceOf","Supersedes","Uses","HasMember","EquivalentTo","HasChild","HasParent","Replaces", |
| "ResponsibleFor","SubmitterOf"}; |
| private final static String[] URL_TYPES = { |
| "HTTP","HTTPS","SMTP","FAX","PHONE","OTHER"}; |
| private final static String[] PHONE_TYPES = { |
| "Office","Home","Mobile","Beeper","FAX"}; |
| private final static String[] POSTAL_ADDRESS_ATTRIBUTES = { |
| "StreetNumber","Street","City","State","PostalCode","Country"}; |
| |
| private final static ArrayList<String> TYPES_LIST = new ArrayList<String>(Arrays.asList(TYPES)); |
| private final static ArrayList<String> OBJECT_TYPES_LIST = new ArrayList<String>(Arrays.asList(OBJECT_TYPES)); |
| private final static ArrayList<String> ASSOCIATION_TYPES_LIST = new ArrayList<String>(Arrays.asList(ASSOCIATION_TYPES)); |
| private final static ArrayList<String> URL_TYPES_LIST = new ArrayList<String>(Arrays.asList(URL_TYPES)); |
| private final static ArrayList<String> PHONE_TYPES_LIST = new ArrayList<String>(Arrays.asList(PHONE_TYPES)); |
| private final static ArrayList<String> POSTAL_ADDRESS_ATTRIBUTES_LIST = new ArrayList<String>(Arrays.asList(POSTAL_ADDRESS_ATTRIBUTES)); |
| |
| private static Map<String,ArrayList<String>> typesMap = new HashMap<String,ArrayList<String>>(); |
| static { |
| typesMap.put(OBJECT_TYPE ,OBJECT_TYPES_LIST); |
| typesMap.put(ASSOCIATION_TYPE ,ASSOCIATION_TYPES_LIST); |
| typesMap.put(URL_TYPE , URL_TYPES_LIST); |
| typesMap.put(PHONE_TYPE , PHONE_TYPES_LIST); |
| typesMap.put(POSTAL_ADDRESS_ATTRIBUTES_STR, POSTAL_ADDRESS_ATTRIBUTES_LIST); |
| } |
| |
| public static Concept getConceptByPath( String path) |
| throws IllegalArgumentException, JAXRException |
| { |
| //Lets tokenize the path |
| StringTokenizer tokenizer = new StringTokenizer(path,"/"); |
| String firstToken = null; |
| String secondToken = null; |
| |
| if(tokenizer.hasMoreTokens()) |
| { |
| firstToken = tokenizer.nextToken(); |
| if (tokenizer.hasMoreTokens()) { |
| secondToken = tokenizer.nextToken(); |
| if (tokenizer.hasMoreTokens()) { |
| log.warn("Looking for 2 tokens. " + tokenizer.nextToken() + " will be ignored"); |
| } |
| } else { |
| throw new IllegalArgumentException("Expected two token separated with a forward slash (/)"); |
| } |
| } else { |
| throw new IllegalArgumentException("Expected two token separated with a forward slash (/)"); |
| } |
| return createConcept(firstToken, secondToken) ; |
| } |
| |
| /** |
| * |
| * @param firstToken |
| * @param secondToken |
| * @return Concept |
| * @throws JAXRException |
| */ |
| private static Concept createConcept(String firstToken, String secondToken) |
| throws JAXRException, IllegalArgumentException |
| { |
| if (!TYPES_LIST.contains(firstToken)) throw new IllegalArgumentException("Expected the path to " + |
| "start with one of " + TYPES); |
| |
| //get the predefined classificationscheme |
| ClassificationScheme cs = new ClassificationSchemeImpl(null); |
| cs.setName(new InternationalStringImpl(firstToken)); |
| cs.setKey(new KeyImpl(firstToken)); |
| |
| ArrayList<String> conceptStrings = typesMap.get(firstToken); |
| if (!conceptStrings.contains(secondToken)) throw new IllegalArgumentException("Expected the path to " + |
| "end with one of " + conceptStrings.toArray()); |
| |
| Concept concept = new ConceptImpl(null); |
| concept.setName(new InternationalStringImpl(secondToken.toLowerCase())); |
| concept.setValue(secondToken); |
| concept.setKey(new KeyImpl(UDDI_ORG_TYPES)); |
| ((ConceptImpl)concept).setScheme(((ClassificationSchemeImpl)cs)); |
| return concept; |
| } |
| } |