// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.detailtabs.sections.util.simpletype;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import com.amalto.workbench.utils.IConstants;
import com.amalto.workbench.widgets.composites.property.IPropertySource;
public abstract class SimpleTypeFacetPropSourceBuilder {
private static Map<String, SimpleTypeFacetPropSourceBuilder> facetName2Builder = new HashMap<String, SimpleTypeFacetPropSourceBuilder>();
public static IPropertySource<?> createFacetPropSource(XSDSimpleTypeDefinition oldSimpleType,
XSDSimpleTypeDefinition targetSimpleType, String facetPropName, Composite cellEditorParent) {
SimpleTypeFacetPropSourceBuilder builder = getPropSourceBuilder(facetPropName);
if (builder == null)
return null;
return builder.doCreatePropSource(targetSimpleType, cellEditorParent, builder.getSourceFacetValue(oldSimpleType));
}
private static SimpleTypeFacetPropSourceBuilder getPropSourceBuilder(String facetPropName) {
if (facetName2Builder.containsKey(facetPropName))
return facetName2Builder.get(facetPropName);
if (IConstants.SIMPLETYPE_FACETNAME_PATTERN.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypePatternFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_ENUM.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeEnumFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_LENGTH.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeLengthFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MINLENGTH.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMinLengthFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MAXLENGTH.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMaxLengthFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_TOTALDIGITS.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeTotalDigitsFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_FRACTIONDIGITS.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeFractionDigitsFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MAXINCLUSIVE.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMaxInclusiveFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MAXEXCLUSIVE.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMaxExclusiveFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MININCLUSIVE.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMinInclusiveFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_MINEXCLUSIVE.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeMinExclusiveFacetPropSourceBuilder());
if (IConstants.SIMPLETYPE_FACETNAME_WHITESPACE.equals(facetPropName))
facetName2Builder.put(facetPropName, new SimpleTypeWhiteSpacePropSourceBuilder());
return facetName2Builder.get(facetPropName);
}
protected Integer toIntegerQuielty(Object value) {
try {
return (Integer) value;
} catch (Exception e) {
return 0;
}
}
protected Double toDoubleQuietly(Object value) {
if (value == null) {
return null;
}
try {
return Double.parseDouble(value.toString());
} catch (Exception e) {
return 0d;
}
}
protected abstract IPropertySource<?> doCreatePropSource(XSDSimpleTypeDefinition targetSimpleType,
Composite cellEditorParent, Object sourceFacetValue);
protected abstract Object getSourceFacetValue(XSDSimpleTypeDefinition simpleType);
}