| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jst.ws.internal.consumption.codegen.javamofvisitors; |
| |
| import java.util.Iterator; |
| import java.util.ListIterator; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.jem.java.Field; |
| import org.eclipse.jem.java.JavaClass; |
| import org.eclipse.jem.java.JavaHelpers; |
| import org.eclipse.jem.java.JavaParameter; |
| import org.eclipse.jem.java.JavaVisibilityKind; |
| import org.eclipse.jem.java.Method; |
| import org.eclipse.jst.ws.internal.consumption.codegen.Visitor; |
| import org.eclipse.jst.ws.internal.consumption.codegen.VisitorAction; |
| import org.eclipse.jst.ws.internal.consumption.command.common.JavaMofReflectionCommand; |
| import org.eclipse.jst.ws.internal.consumption.datamodel.beanmodel.TypeFactory; |
| |
| |
| /** |
| * Objects of this class represent a visitor. |
| * */ |
| public class JavaMofFieldVisitor implements Visitor |
| { |
| |
| // Copyright |
| public static final String copyright = "(c) Copyright IBM Corporation 2000, 2002."; |
| |
| |
| private String clientProject; |
| |
| /* |
| * Constructor |
| **/ |
| public JavaMofFieldVisitor() |
| { |
| } |
| |
| /* |
| * Use this to reflect |
| */ |
| public void setProject(String clientProject) |
| { |
| this.clientProject = clientProject; |
| } |
| |
| /* |
| * Use this to reflect |
| */ |
| public String getProject() |
| { |
| return clientProject; |
| } |
| |
| /* |
| * Get the attribute belonging to this complex type |
| * @param JavaParameter javaParameter that owns the type |
| * @param VisitorAction Action to be performed on each method |
| **/ |
| public IStatus run ( Object javaclass, VisitorAction vAction) |
| { |
| IStatus status = Status.OK_STATUS; |
| JavaClass javaClass = (JavaClass)javaclass; |
| |
| boolean holderClass = false; |
| EList implemented = javaClass.getImplementsInterfaces(); |
| for (int i = 0; i < implemented.size(); i++) { |
| JavaClass anInterface = (JavaClass) implemented.get(i); |
| if (anInterface.getQualifiedName().equals("javax.xml.rpc.holders.Holder")) |
| holderClass = true; |
| } |
| |
| //beaninfo code |
| if(holderClass){ |
| EList e = javaClass.getFields(); |
| ListIterator list = e.listIterator(); |
| while(list.hasNext()){ |
| Field field = (Field)list.next(); |
| if(field.getJavaVisibility().getValue() == JavaVisibilityKind.PUBLIC && !field.isFinal() && !field.isStatic()){ |
| if(fieldCheck(field)) |
| status = vAction.visit(field); |
| } |
| } |
| } |
| |
| return status; |
| } |
| private boolean fieldCheck(Field field) |
| { |
| // so its a bean make sure it has a default constructor |
| JavaMofReflectionCommand javaMofRef = new JavaMofReflectionCommand(); |
| javaMofRef.setProxyBean(((JavaHelpers)field.getEType()).getQualifiedName()); |
| javaMofRef.setClientProject(getProject()); |
| javaMofRef.execute(null, null); |
| if(javaMofRef.getJavaClass() instanceof JavaClass){ |
| if(TypeFactory.recognizedBean(javaMofRef.getJavaClass().getJavaName())) return true; |
| return defaultCheck((JavaClass)javaMofRef.getJavaClass()); |
| } |
| return true; |
| } |
| |
| private boolean defaultCheck(JavaClass javaClass){ |
| |
| Iterator m=javaClass.getMethods().iterator(); |
| //now check for a default constructor |
| boolean defaultConst = true; |
| while (m.hasNext()) { |
| Method method=(Method)m.next(); |
| if (javaClass.getName().equals(method.getName())){ |
| //now the inputs |
| JavaParameter javaParameter[] = method.listParametersWithoutReturn(); |
| if (javaParameter.length > 0){ |
| //then we have no default constructor |
| defaultConst = false; |
| } |
| else if(javaParameter.length == 0){ |
| if (method.getJavaVisibility().getValue() == 0) |
| return true; |
| else if(method.getJavaVisibility().getValue() == 1) |
| defaultConst = false; |
| } |
| } |
| } |
| |
| return defaultConst; |
| } |
| } |