/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 1997-2015 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package com.sun.tools.xjc.reader.dtd.bindinfo; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import com.sun.tools.xjc.model.CBuiltinLeafInfo; import com.sun.tools.xjc.model.CClassInfoParent; import com.sun.tools.xjc.model.CEnumConstant; import com.sun.tools.xjc.model.CEnumLeafInfo; import com.sun.tools.xjc.model.Model; import com.sun.tools.xjc.model.TypeUse; import org.w3c.dom.Element; /** * {@code <enumeration>} declaration in the binding file. */ public final class BIEnumeration implements BIConversion { /** Creates an object from {@code <enumeration>} declaration. */ private BIEnumeration( Element _e, TypeUse _xducer ) { this.e = _e; this.xducer = _xducer; } /** {@code <enumeration>} element in DOM. */ private final Element e; private final TypeUse xducer; public String name() { return DOMUtil.getAttribute(e,"name"); } /** Returns a transducer for this enumeration declaration. */ public TypeUse getTransducer() { return xducer; } /** Creates a global enumeration declaration. */ static BIEnumeration create( Element dom, BindInfo parent ) { // create a class in the target package. return new BIEnumeration( dom, new CEnumLeafInfo( parent.model, null, new CClassInfoParent.Package(parent.getTargetPackage()), DOMUtil.getAttribute(dom,"name"), CBuiltinLeafInfo.STRING, buildMemberList(parent.model,dom), null, null/*TODO*/, DOMLocator.getLocationInfo(dom))); } /** Creates an element-local enumeration declaration. */ static BIEnumeration create( Element dom, BIElement parent ) { // create a class as a nested class return new BIEnumeration( dom, new CEnumLeafInfo( parent.parent.model, null, parent.clazz, DOMUtil.getAttribute(dom,"name"), CBuiltinLeafInfo.STRING, buildMemberList(parent.parent.model,dom), null, null/*TODO*/, DOMLocator.getLocationInfo(dom) )); } private static List<CEnumConstant> buildMemberList( Model model, Element dom ) { List<CEnumConstant> r = new ArrayList<CEnumConstant>(); String members = DOMUtil.getAttribute(dom,"members"); if(members==null) members=""; // TODO: error handling StringTokenizer tokens = new StringTokenizer(members); while(tokens.hasMoreTokens()) { String token = tokens.nextToken(); r.add(new CEnumConstant(model.getNameConverter().toConstantName(token), null,token,null/*TODO*/,null,null)); } return r; } }