/******************************************************************************* * Copyright (c) 2007 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.internal.core; import java.util.List; import java.util.Properties; import org.eclipse.jdt.core.IMethod; import org.jboss.tools.common.model.project.ext.IValueInfo; import org.jboss.tools.common.model.project.ext.event.Change; import org.jboss.tools.seam.core.ISeamAnnotatedFactory; import org.jboss.tools.seam.core.ISeamElement; import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration; import org.jboss.tools.seam.core.ScopeType; import org.w3c.dom.Element; /** * @author Viacheslav Kabanovich */ public class SeamAnnotatedFactory extends SeamJavaContextVariable implements ISeamAnnotatedFactory { SeamJavaComponentDeclaration parentDeclaration = null; boolean autoCreate = false; public SeamAnnotatedFactory() {} public IMethod getSourceMethod() { return (IMethod)javaSource; } public boolean isAutoCreate() { return autoCreate; } public void setAutoCreate(boolean autoCreate) { this.autoCreate = autoCreate; } @Override public List<Change> merge(ISeamElement s) { List<Change> changes = super.merge(s); SeamAnnotatedFactory af = (SeamAnnotatedFactory)s; if(autoCreate != af.autoCreate) { changes = Change.addChange(changes, new Change(this, ISeamXmlComponentDeclaration.AUTO_CREATE, autoCreate, af.autoCreate)); autoCreate = af.autoCreate; } return changes; } public void setAutoCreate(IValueInfo value) { attributes.put(ISeamXmlComponentDeclaration.AUTO_CREATE, value); setAutoCreate(value != null && "true".equals(value.getValue())); //$NON-NLS-1$ } @Override public ScopeType getScope() { ScopeType value = super.getScope(); if(value == null || value == ScopeType.UNSPECIFIED) { if(parentDeclaration != null) value = parentDeclaration.getScope(); } if(value == null || value == ScopeType.UNSPECIFIED) { value = ScopeType.EVENT; } return value; } public void setParentDeclaration(SeamJavaComponentDeclaration parentDeclaration) { this.parentDeclaration = parentDeclaration; } public SeamAnnotatedFactory clone() throws CloneNotSupportedException { SeamAnnotatedFactory c = (SeamAnnotatedFactory)super.clone(); //we need not new copy here but reference! c.parentDeclaration = parentDeclaration == null ? null : parentDeclaration.clone(); return c; } public String getXMLName() { return SeamXMLConstants.TAG_FACTORY; } public String getXMLClass() { return SeamXMLConstants.CLS_JAVA; } public Element toXML(Element parent, Properties context) { Element element = super.toXML(parent, context); element.setAttribute(SeamXmlComponentDeclaration.AUTO_CREATE, "" + autoCreate); return element; } public void loadXML(Element element, Properties context) { super.loadXML(element, context); autoCreate = "true".equals(element.getAttribute(SeamXmlComponentDeclaration.AUTO_CREATE)); } }