| /******************************************************************************* |
| * Copyright (c) 2001, 2006 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.wst.xsd.ui.internal.adapters; |
| |
| import org.eclipse.wst.xsd.ui.internal.adt.design.IAnnotationProvider; |
| import org.eclipse.wst.xsd.ui.internal.editor.Messages; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| import org.eclipse.xsd.XSDParticle; |
| |
| public class XSDParticleAdapter extends XSDBaseAdapter implements IAnnotationProvider |
| { |
| public XSDParticleAdapter() |
| { |
| super(); |
| } |
| |
| public int getMaxOccurs() |
| { |
| return getMaxOccurs((XSDConcreteComponent) target); |
| } |
| |
| public int getMinOccurs() |
| { |
| return getMinOccurs((XSDConcreteComponent) target); |
| } |
| |
| public static int getMinOccurs(XSDConcreteComponent component) |
| { |
| int minOccur = -2; |
| if (component != null) |
| { |
| Object o = component.getContainer(); |
| if (o instanceof XSDParticle) |
| { |
| if (((XSDParticle) o).isSetMinOccurs()) |
| { |
| try |
| { |
| minOccur = ((XSDParticle) o).getMinOccurs(); |
| } |
| catch (Exception e) |
| { |
| } |
| } |
| } |
| } |
| return minOccur; |
| } |
| |
| public static int getMaxOccurs(XSDConcreteComponent component) |
| { |
| int maxOccur = -2; |
| if (component != null) |
| { |
| Object o = component.getContainer(); |
| if (o instanceof XSDParticle) |
| { |
| if (((XSDParticle) o).isSetMaxOccurs()) |
| { |
| try |
| { |
| maxOccur = ((XSDParticle) o).getMaxOccurs(); |
| } |
| catch (Exception e) |
| { |
| } |
| } |
| } |
| } |
| return maxOccur; |
| } |
| |
| public String getNameAnnotationString() |
| { |
| return buildAnnotationString(true); |
| } |
| |
| public String getNameAnnotationToolTipString() |
| { |
| return buildAnnotationString(false); |
| } |
| |
| public String getTypeAnnotationString() |
| { |
| return null; |
| } |
| |
| public String getTypeAnnotationToolTipString() |
| { |
| return null; |
| } |
| |
| protected String buildAnnotationString(boolean isForLabel) |
| { |
| String occurenceDescription = ""; //$NON-NLS-1$ |
| String toolTipDescription = ""; //$NON-NLS-1$ |
| // TODO: set int values as defined constants |
| // -2 means the user didn't specify (so the default is 1) |
| int minOccurs = getMinOccurs(); |
| int maxOccurs = getMaxOccurs(); |
| |
| // This is for the attribute field case, which has no |
| // occurrence attributes |
| if (minOccurs == -3 && maxOccurs == -3) |
| { |
| occurenceDescription = ""; //$NON-NLS-1$ |
| } |
| else if (minOccurs == 0 && (maxOccurs == -2 || maxOccurs == 1)) |
| { |
| occurenceDescription = "[0..1]"; //$NON-NLS-1$ |
| toolTipDescription = Messages._UI_LABEL_OPTIONAL; |
| } |
| else if (minOccurs == 0 && maxOccurs == -1) |
| { |
| occurenceDescription = "[0..*]"; //$NON-NLS-1$ |
| toolTipDescription = Messages._UI_LABEL_ZERO_OR_MORE; |
| } |
| else if ((minOccurs == 1 && maxOccurs == -1) || (minOccurs == -2 && maxOccurs == -1)) |
| { |
| occurenceDescription = "[1..*]"; //$NON-NLS-1$ |
| toolTipDescription = Messages._UI_LABEL_ONE_OR_MORE; |
| } |
| else if ((minOccurs == 1 && maxOccurs == 1) || (minOccurs == -2 && maxOccurs == 1) || (minOccurs == 1 && maxOccurs == -2)) |
| { |
| occurenceDescription = "[1..1]"; //$NON-NLS-1$ |
| toolTipDescription = Messages._UI_LABEL_REQUIRED; |
| } |
| else if (minOccurs == -2 && maxOccurs == -2) |
| { |
| occurenceDescription = ""; //$NON-NLS-1$ |
| // none specified, so don't have any toolTip description |
| } |
| else |
| { |
| if (maxOccurs == -2) |
| maxOccurs = 1; |
| String maxSymbol = maxOccurs == -1 ? "*" : "" + maxOccurs; //$NON-NLS-1$ //$NON-NLS-2$ |
| String minSymbol = minOccurs == -2 ? "1" : "" + minOccurs; //$NON-NLS-1$ //$NON-NLS-2$ |
| occurenceDescription = "[" + minSymbol + ".." + maxSymbol + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| toolTipDescription = Messages._UI_LABEL_ARRAY; |
| } |
| |
| if (isForLabel) |
| { |
| return occurenceDescription; |
| } |
| else |
| { |
| return toolTipDescription; |
| } |
| } |
| |
| } |