blob: aaf89fe239a90464827a0fdf7cd4d60577cf00b1 [file] [log] [blame]
/*
* Copyright (c) 2014-2016 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.preferences.impl;
import org.eclipse.oomph.preferences.PreferenceNode;
import org.eclipse.oomph.preferences.PreferencesFactory;
import org.eclipse.oomph.preferences.PreferencesPackage;
import org.eclipse.oomph.preferences.Property;
import org.eclipse.oomph.util.StringUtil;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.impl.EFactoryImpl;
import org.eclipse.emf.ecore.plugin.EcorePlugin;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
/**
* <!-- begin-user-doc -->
* An implementation of the model <b>Factory</b>.
* <!-- end-user-doc -->
* @generated
*/
public class PreferencesFactoryImpl extends EFactoryImpl implements PreferencesFactory
{
private Map<String, URI> PREFERENCE_URIS = Collections.synchronizedMap(new WeakHashMap<String, URI>());
/**
* Creates the default factory implementation.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static PreferencesFactory init()
{
try
{
PreferencesFactory thePreferencesFactory = (PreferencesFactory)EPackage.Registry.INSTANCE.getEFactory(PreferencesPackage.eNS_URI);
if (thePreferencesFactory != null)
{
return thePreferencesFactory;
}
}
catch (Exception exception)
{
EcorePlugin.INSTANCE.log(exception);
}
return new PreferencesFactoryImpl();
}
/**
* Creates an instance of the factory.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public PreferencesFactoryImpl()
{
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public EObject create(EClass eClass)
{
switch (eClass.getClassifierID())
{
case PreferencesPackage.PREFERENCE_NODE:
return createPreferenceNode();
case PreferencesPackage.PROPERTY:
return createProperty();
default:
throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object createFromString(EDataType eDataType, String initialValue)
{
switch (eDataType.getClassifierID())
{
case PreferencesPackage.ESCAPED_STRING:
return createEscapedStringFromString(eDataType, initialValue);
case PreferencesPackage.URI:
return createURIFromString(eDataType, initialValue);
case PreferencesPackage.PREFERENCE_NODE_NAME:
return createPreferenceNodeNameFromString(eDataType, initialValue);
default:
throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String convertToString(EDataType eDataType, Object instanceValue)
{
switch (eDataType.getClassifierID())
{
case PreferencesPackage.ESCAPED_STRING:
return convertEscapedStringToString(eDataType, instanceValue);
case PreferencesPackage.URI:
return convertURIToString(eDataType, instanceValue);
case PreferencesPackage.PREFERENCE_NODE_NAME:
return convertPreferenceNodeNameToString(eDataType, instanceValue);
default:
throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public PreferenceNode createPreferenceNode()
{
PreferenceNodeImpl preferenceNode = new PreferenceNodeImpl();
return preferenceNode;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Property createProperty()
{
PropertyImpl property = new PropertyImpl();
return property;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String createEscapedString(String literal)
{
return StringUtil.unescape(literal);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String createEscapedStringFromString(EDataType eDataType, String initialValue)
{
return createEscapedString(initialValue);
}
private static final String[] ESCAPES = { "\\000", "\\001", "\\002", "\\003", "\\004", "\\005", "\\006", "\\007", "\\010", "\t", "\n", "\\013", "\\014", "\r",
"\\016", "\\017", "\\020", "\\021", "\\022", "\\023", "\\024", "\\025", "\\026", "\\027", "\\030", "\\031", "\\032", "\\033", "\\034", "\\035", "\\036",
"\\037" };
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String convertEscapedString(String instanceValue)
{
if (instanceValue == null)
{
return null;
}
StringBuilder result = new StringBuilder();
for (int i = 0, length = instanceValue.length(); i < length; ++i)
{
char c = instanceValue.charAt(i);
if (c < ESCAPES.length)
{
result.append(ESCAPES[c]);
}
else if (c == '\\')
{
result.append("\\\\");
}
else if (c == '\177')
{
result.append("\\177");
}
else
{
result.append(c);
}
}
return result.toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertEscapedStringToString(EDataType eDataType, Object instanceValue)
{
return convertEscapedString((String)instanceValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public URI createURI(String literal)
{
if (literal == null)
{
return null;
}
URI result = PREFERENCE_URIS.get(literal);
if (result == null)
{
String[] segments = literal.split("/");
int length = segments.length;
if (length == 0)
{
result = URI.createHierarchicalURI(null, "", null, null, null);
}
else
{
result = URI.createURI("");
StringBuilder property = null;
boolean startProperty = false;
int start = -1;
for (int i = 0; i < length; ++i)
{
String segment = segments[i];
if (property != null)
{
if (startProperty)
{
property.append('/');
}
else
{
startProperty = true;
}
property.append(segment);
}
else if (segment.length() == 0)
{
if (i == 0)
{
if (i != length - 1)
{
result = URI.createHierarchicalURI(null, "", null, null, null);
}
start = 1;
}
else
{
property = new StringBuilder();
}
}
else if (i == start)
{
result = URI.createHierarchicalURI(null, URI.encodeAuthority(segment, false), null, null, null);
}
else
{
result = result.appendSegment(URI.encodeSegment(segment, false));
}
}
if (property != null)
{
result = result.appendSegment(URI.encodeSegment(property.toString(), false));
}
}
PREFERENCE_URIS.put(literal, result);
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public URI createURIFromString(EDataType eDataType, String initialValue)
{
return createURI(initialValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String convertURI(URI instanceValue)
{
if (instanceValue == null)
{
return null;
}
StringBuilder result = new StringBuilder();
String authority = instanceValue.authority();
if (authority != null)
{
result.append('/');
result.append(URI.decode(authority));
}
for (String segment : instanceValue.segments())
{
if (result.length() != 0)
{
result.append('/');
}
String decodedSegment = URI.decode(segment);
if (decodedSegment.contains("/"))
{
result.append('/');
}
result.append(decodedSegment);
}
return result.toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertURIToString(EDataType eDataType, Object instanceValue)
{
return convertURI((URI)instanceValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String createPreferenceNodeName(String literal)
{
return (String)super.createFromString(PreferencesPackage.Literals.PREFERENCE_NODE_NAME, literal);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String createPreferenceNodeNameFromString(EDataType eDataType, String initialValue)
{
return createPreferenceNodeName(initialValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertPreferenceNodeName(String instanceValue)
{
return super.convertToString(PreferencesPackage.Literals.PREFERENCE_NODE_NAME, instanceValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertPreferenceNodeNameToString(EDataType eDataType, Object instanceValue)
{
return convertPreferenceNodeName((String)instanceValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public PreferencesPackage getPreferencesPackage()
{
return (PreferencesPackage)getEPackage();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @deprecated
* @generated
*/
@Deprecated
public static PreferencesPackage getPackage()
{
return PreferencesPackage.eINSTANCE;
}
} // PreferencesFactoryImpl