/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.xml.choice; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.mapping.choice.IChoiceObject; import org.teiid.designer.metamodels.xml.ChoiceErrorMode; import org.teiid.designer.metamodels.xml.ChoiceOption; import org.teiid.designer.metamodels.xml.XmlAll; import org.teiid.designer.metamodels.xml.XmlChoice; import org.teiid.designer.metamodels.xml.XmlContainerNode; import org.teiid.designer.metamodels.xml.XmlDocumentNode; import org.teiid.designer.metamodels.xml.XmlFragment; import org.teiid.designer.metamodels.xml.XmlSequence; /** * XmlChoiceObject * * @since 8.0 */ public class XmlChoiceObject implements IChoiceObject { // ======================= // instance Variables // ======================= private XmlChoice xcChoice; private Map optionSqlCriteriaMap = new HashMap(); /** * Construct an instance of XmlChoiceObject. * */ public XmlChoiceObject( XmlChoice xcChoice ) { super(); this.xcChoice = xcChoice; } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#getOrderedOptions() */ @Override public List getOrderedOptions() { List contents = xcChoice.getOrderedChoiceOptions(); return contents; } @Override public void setOrderedOptions( List lst ) { xcChoice.setOrderedChoiceOptions( lst ); } /* (non-Javadoc) * swjTODO: Design problem: There should not be a getName down here. The options should be Objects * that are rendered by an ILabelProvider up in the ui ChoicePanel. * * @See org.teiid.designer.mapping.choice.IChoiceObject#getName() */ @Override public String getName( Object option ) { String result = null; if ( option instanceof EObject ) { result = ModelerCore.getModelEditor().getName((EObject) option); if ( result == null ) { if ( option instanceof XmlSequence ) { result = "sequence"; //$NON-NLS-1$ hack because we can't get a label provider down in this non-ui class } else if ( option instanceof XmlChoice ) { result = "choice"; //$NON-NLS-1$ } else if ( option instanceof XmlAll ) { result = "all"; //$NON-NLS-1$ } } } if ( result == null ) { result = option.toString(); } return result; } /** * @see org.teiid.designer.mapping.choice.IChoiceObject#getCriteria(java.lang.Object) */ @Override public String getCriteria(final Object option) { return ((ChoiceOption)option).getChoiceCriteria(); } /** * @see org.teiid.designer.mapping.choice.IChoiceObject#setCriteria(java.lang.Object, java.lang.String) */ @Override public void setCriteria(final Object option, final String criteria) { ((ChoiceOption)option).setChoiceCriteria(criteria); } /** * @see org.teiid.designer.mapping.choice.IChoiceObject#getSqlCriteria(java.lang.Object) * @since 4.3 */ @Override public String getSqlCriteria(final Object option) { return (String)this.optionSqlCriteriaMap.get(option); } /** * @see org.teiid.designer.mapping.choice.IChoiceObject#setSqlCriteria(java.lang.Object, java.lang.String) * @since 4.3 */ @Override public void setSqlCriteria(final Object option, final String criteria) { this.optionSqlCriteriaMap.put(option, criteria); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#isIncluded(java.lang.Object) */ @Override public boolean isIncluded( Object option ) { if ( option instanceof XmlDocumentNode ) { return !((XmlDocumentNode)option).isExcludeFromDocument(); } else if ( option instanceof XmlContainerNode ) { return !((XmlContainerNode)option).isExcludeFromDocument(); } else { return true; } } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#setIncluded(java.lang.Object, boolean) */ @Override public void setIncluded( Object option, boolean b ) { if ( option instanceof XmlDocumentNode ) { ((XmlDocumentNode)option).setExcludeFromDocument( !b ); } if ( option instanceof XmlContainerNode ) { ((XmlContainerNode)option).setExcludeFromDocument( !b ); } } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#move(int, Object) */ @Override public void move( int iNewPosition, Object object ) { /* * this method has been replaced by getOrderedOptions/setOrderedOptions. */ /* * jh note: * xcChoice.getElements().move(,,,) did not work because the * set of elements does not include any containers like * sequence, choice or all. * ModelerCore.getModelEditor().move(...) works, but not all the time. Will submit a defect * for metadata team. */ // try { // ModelerCore.getModelEditor().move( getChoice(), (EObject)object, iNewPosition ); // } catch ( ModelerCoreException mce ) { // ModelerCore.Util.log(IStatus.ERROR, mce, mce.getMessage()); // } throw new UnsupportedOperationException(); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#move(int, Object) */ @Override public void move( int iNewPosition, int iOldPosition ) { /* * jh note: Since we now must use 'ModelerCore.getModelEditor().move(...)', * which takes an object and a destination index, this move is no * longer possible. */ throw new UnsupportedOperationException(); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#getMinOccurs() */ @Override public int getMinOccurs() { return xcChoice.getMinOccurs(); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#getDefaultErrorMode() */ @Override public String getDefaultErrorMode() { return xcChoice.getDefaultErrorMode().getName(); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#setDefaultErrorMode() */ @Override public void setDefaultErrorMode( String value ) { xcChoice.setDefaultErrorMode( ChoiceErrorMode.get( value ) ); } @Override public String[] getValidErrorModeValues() { List lstValues = ChoiceErrorMode.VALUES; String[] saValues = new String[ lstValues.size() ]; int iCounter = 0; Iterator it = lstValues.iterator(); while ( it.hasNext() ) { ChoiceErrorMode cemTemp = (ChoiceErrorMode)it.next(); saValues[ iCounter++ ] = cemTemp.getName(); } return saValues; } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#getDefaultOption() */ @Override public Object getDefaultOption() { return xcChoice.getDefaultOption(); } /* (non-Javadoc) * @See org.teiid.designer.mapping.choice.IChoiceObject#setDefaultOption() */ @Override public void setDefaultOption( Object value ) { xcChoice.setDefaultOption( (ChoiceOption)value ); } @Override public EObject getRoot() { // get the choice object's root by walking upward until we find a XmlFragment EObject eoRoot = null; int iCounter = 0; EObject eoTemp = xcChoice.getParent(); while( true ) { if ( eoTemp instanceof XmlFragment ) { eoRoot = eoTemp; break; } iCounter++; if ( iCounter > 100 ) { // System.out.println("[XmlChoiceObject.getRoot()] Quitting after 100 tries"); //$NON-NLS-1$ break; } // get the next parent eoTemp = eoTemp.eContainer(); } return eoRoot; } @Override public EObject getChoice() { return xcChoice; } @Override public EObject getParent() { return xcChoice.getParent(); } }