blob: 156f8bb0d7ada1605d8ebd772098dcba78a599e5 [file] [log] [blame]
/**
*
* 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;
}
}