blob: 12f914d019160b6eabe28fc63634cf0c83164ca3 [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 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.p2.impl;
import org.eclipse.oomph.p2.Configuration;
import org.eclipse.oomph.p2.P2Exception;
import org.eclipse.oomph.p2.P2Factory;
import org.eclipse.oomph.p2.P2Package;
import org.eclipse.oomph.p2.ProfileDefinition;
import org.eclipse.oomph.p2.Repository;
import org.eclipse.oomph.p2.RepositoryList;
import org.eclipse.oomph.p2.RepositoryType;
import org.eclipse.oomph.p2.Requirement;
import org.eclipse.oomph.p2.RequirementType;
import org.eclipse.oomph.p2.VersionSegment;
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 org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.metadata.VersionRange;
/**
* <!-- begin-user-doc -->
* An implementation of the model <b>Factory</b>.
* <!-- end-user-doc -->
* @generated
*/
public class P2FactoryImpl extends EFactoryImpl implements P2Factory
{
/**
* Creates the default factory implementation.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static P2Factory init()
{
try
{
P2Factory theP2Factory = (P2Factory)EPackage.Registry.INSTANCE.getEFactory(P2Package.eNS_URI);
if (theP2Factory != null)
{
return theP2Factory;
}
}
catch (Exception exception)
{
EcorePlugin.INSTANCE.log(exception);
}
return new P2FactoryImpl();
}
/**
* Creates an instance of the factory.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public P2FactoryImpl()
{
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public EObject create(EClass eClass)
{
switch (eClass.getClassifierID())
{
case P2Package.PROFILE_DEFINITION:
return createProfileDefinition();
case P2Package.CONFIGURATION:
return createConfiguration();
case P2Package.REQUIREMENT:
return createRequirement();
case P2Package.REPOSITORY_LIST:
return createRepositoryList();
case P2Package.REPOSITORY:
return createRepository();
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 P2Package.REPOSITORY_TYPE:
return createRepositoryTypeFromString(eDataType, initialValue);
case P2Package.VERSION_SEGMENT:
return createVersionSegmentFromString(eDataType, initialValue);
case P2Package.REQUIREMENT_TYPE:
return createRequirementTypeFromString(eDataType, initialValue);
case P2Package.VERSION:
return createVersionFromString(eDataType, initialValue);
case P2Package.VERSION_RANGE:
return createVersionRangeFromString(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 P2Package.REPOSITORY_TYPE:
return convertRepositoryTypeToString(eDataType, instanceValue);
case P2Package.VERSION_SEGMENT:
return convertVersionSegmentToString(eDataType, instanceValue);
case P2Package.REQUIREMENT_TYPE:
return convertRequirementTypeToString(eDataType, instanceValue);
case P2Package.VERSION:
return convertVersionToString(eDataType, instanceValue);
case P2Package.VERSION_RANGE:
return convertVersionRangeToString(eDataType, instanceValue);
default:
throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public ProfileDefinition createProfileDefinition()
{
ProfileDefinitionImpl profileDefinition = new ProfileDefinitionImpl();
return profileDefinition;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Configuration createConfiguration()
{
ConfigurationImpl configuration = new ConfigurationImpl();
return configuration;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Requirement createRequirement()
{
RequirementImpl requirement = new RequirementImpl();
return requirement;
}
public Requirement createRequirement(String id)
{
Requirement requirement = createRequirement();
requirement.setName(id);
return requirement;
}
public Requirement createRequirement(String id, VersionRange versionRange)
{
Requirement requirement = createRequirement(id);
requirement.setVersionRange(versionRange);
return requirement;
}
public Requirement createRequirement(String id, VersionRange versionRange, boolean optional)
{
Requirement requirement = createRequirement(id, versionRange);
requirement.setOptional(optional);
return requirement;
}
public Requirement createRequirement(String id, VersionRange versionRange, boolean optional, boolean greedy)
{
Requirement requirement = createRequirement(id, versionRange);
requirement.setOptional(optional);
requirement.setGreedy(greedy);
return requirement;
}
public Requirement createRequirement(String id, Version version)
{
if (version == null)
{
version = Version.emptyVersion;
}
VersionRange versionRange = createVersionRange(version, VersionSegment.MICRO);
return createRequirement(id, versionRange);
}
public Requirement createRequirement(String id, Version version, boolean optional)
{
Requirement requirement = createRequirement(id, version);
requirement.setOptional(optional);
return requirement;
}
public Requirement createRequirement(String id, Version version, boolean optional, boolean greedy)
{
Requirement requirement = createRequirement(id, version);
requirement.setOptional(optional);
requirement.setGreedy(greedy);
return requirement;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public RepositoryList createRepositoryList()
{
RepositoryListImpl repositoryList = new RepositoryListImpl();
return repositoryList;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Repository createRepository()
{
RepositoryImpl repository = new RepositoryImpl();
return repository;
}
public Repository createRepository(String url)
{
Repository repository = createRepository();
repository.setURL(url);
return repository;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public RepositoryType createRepositoryTypeFromString(EDataType eDataType, String initialValue)
{
RepositoryType result = RepositoryType.get(initialValue);
if (result == null)
{
throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertRepositoryTypeToString(EDataType eDataType, Object instanceValue)
{
return instanceValue == null ? null : instanceValue.toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public VersionSegment createVersionSegmentFromString(EDataType eDataType, String initialValue)
{
VersionSegment result = VersionSegment.get(initialValue);
if (result == null)
{
throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertVersionSegmentToString(EDataType eDataType, Object instanceValue)
{
return instanceValue == null ? null : instanceValue.toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public RequirementType createRequirementTypeFromString(EDataType eDataType, String initialValue)
{
RequirementType result = RequirementType.get(initialValue);
if (result == null)
{
throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String convertRequirementTypeToString(EDataType eDataType, Object instanceValue)
{
return instanceValue == null ? null : instanceValue.toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public Version createVersionFromString(EDataType eDataType, String initialValue)
{
return initialValue == null ? null : Version.create(initialValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String convertVersionToString(EDataType eDataType, Object instanceValue)
{
return instanceValue == null ? null : ((Version)instanceValue).toString();
}
public VersionRange createVersionRange(Version version, VersionSegment segment)
{
return createVersionRange(version, segment, false);
}
public VersionRange createVersionRange(Version version, VersionSegment segment, boolean compatible)
{
if (version == null || version.equals(Version.emptyVersion))
{
return VersionRange.emptyRange;
}
if (segment == null || segment == VersionSegment.QUALIFIER)
{
if (compatible && version.getSegmentCount() != 0)
{
Comparable<?> firstSegment = version.getSegment(0);
if (firstSegment instanceof Integer)
{
Integer major = (Integer)firstSegment;
return new VersionRange(version, true, Version.createOSGi(major + 1, 0, 0), false);
}
}
return new VersionRange(version, true, version, true);
}
if (!version.isOSGiCompatible())
{
throw new P2Exception("Version not OSGi-compatible: " + version);
}
org.osgi.framework.Version osgiVersion = new org.osgi.framework.Version(version.toString());
int major = osgiVersion.getMajor();
int minor = osgiVersion.getMinor();
int micro = osgiVersion.getMicro();
switch (segment)
{
case MAJOR:
return new VersionRange(Version.createOSGi(major, 0, 0), true, Version.createOSGi(major + 1, 0, 0), false);
case MINOR:
return new VersionRange(Version.createOSGi(major, minor, 0), true,
compatible ? Version.createOSGi(major + 1, 0, 0) : Version.createOSGi(major, minor + 1, 0), false);
case MICRO:
return new VersionRange(Version.createOSGi(major, minor, micro), true,
compatible ? Version.createOSGi(major + 1, 0, 0) : Version.createOSGi(major, minor, micro + 1), false);
default:
throw new P2Exception("Invalid segment: " + segment);
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public VersionRange createVersionRangeFromString(EDataType eDataType, String initialValue)
{
return initialValue == null ? null : new VersionRange(initialValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String convertVersionRangeToString(EDataType eDataType, Object instanceValue)
{
return instanceValue == null ? null : ((VersionRange)instanceValue).toString();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public P2Package getP2Package()
{
return (P2Package)getEPackage();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @deprecated
* @generated
*/
@Deprecated
public static P2Package getPackage()
{
return P2Package.eINSTANCE;
}
} // P2FactoryImpl