/*******************************************************************************
* Copyright (c) 2013 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipselabs.emf.loophole.internal.model.impl;
import java.text.MessageFormat;
import java.util.Iterator;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipselabs.emf.loophole.internal.model.GenGapPackage;
import org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl;
import org.eclipselabs.emf.loophole.internal.model.metadata.LoopholeFactory;
/**
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
*
*/
public class GenGapPackageCustomImpl extends BasicGenGapPackageImpl {
/**
* {@inheritDoc}
*
* @see org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl#reconcile()
*/
@Override
public boolean reconcile() {
GenPackage genPackage = getGenPackage();
if (genPackage == null || genPackage.eIsProxy() || genPackage.eResource() == null) {
return false;
} else {
for (Iterator<GenGapPackage> i = getNestedGenGapPackages().iterator(); i.hasNext();) {
GenGapPackage nestedGenGapPackage = i.next();
if (!nestedGenGapPackage.reconcile()) {
i.remove();
}
}
initialize(genPackage);
return true;
}
}
/**
* {@inheritDoc}
*
* @see org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl#reconcile(org.eclipselabs.emf.loophole.internal.model.GenGapPackage)
*/
@Override
public boolean reconcile(GenGapPackage oldGenGapPackage) {
if (genPackage != null) {
if (genPackage.getEcorePackage().getNsURI() == null?
genPackage.getEcorePackage().getName().equals(oldGenGapPackage.getGenPackage().getEcorePackage().getName()) :
genPackage.getEcorePackage().getNsURI().equals(oldGenGapPackage.getGenPackage().getEcorePackage().getNsURI())) {
for (GenGapPackage nestedGenGapPackage : getNestedGenGapPackages()) {
for (GenGapPackage oldNestedGenGapPackage : oldGenGapPackage.getNestedGenGapPackages()) {
if (nestedGenGapPackage.reconcile(oldNestedGenGapPackage)) {
break;
}
}
}
reconcileSettings(oldGenGapPackage);
return true;
} else {
return false;
}
} else {
return false;
}
}
/**
* @param oldGenGapPackage
*/
public void reconcileSettings(GenGapPackage oldGenGapPackage) {
setCustomClassPackageSuffix(oldGenGapPackage.getCustomClassPackageSuffix());
setCustomProviderPackageSuffix(oldGenGapPackage.getCustomProviderPackageSuffix());
}
/**
* @param ePackage
*/
public void initialize(GenPackage genPackage) {
if (genPackage != getGenPackage()) {
setGenPackage(genPackage);
setCustomClassPackageSuffix(genPackage.getClassPackageSuffix());
setCustomProviderPackageSuffix(genPackage.getProviderPackageSuffix());
}
for (GenPackage nestedGenPackage : genPackage.getNestedGenPackages()) {
GenGapPackage nestedGenGapPackage = LoopholeFactory.eINSTANCE.createGenGapPackage();
getNestedGenGapPackages().add(nestedGenGapPackage);
((GenGapPackageCustomImpl) nestedGenGapPackage).initialize(nestedGenPackage);
}
}
/**
* {@inheritDoc}
*
* @see org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl#findGenGapPackage(org.eclipse.emf.codegen.ecore.genmodel.GenPackage)
*/
public GenGapPackage findGenGapPackage(GenPackage genPackage) {
for (GenGapPackage genGapPackage : getNestedGenGapPackages()) {
if (genGapPackage.getGenPackage() == genPackage) {
return genGapPackage;
}
}
return null;
}
protected String getCustomClassName(GenClass genClass) {
return MessageFormat.format(getGenGapModel().getCustomClassNamePattern(), genClass.getName());
}
/**
* {@inheritDoc}
* @see org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl#getCustomQualifiedClassName(org.eclipse.emf.codegen.ecore.genmodel.GenClass)
*/
@Override
public String getCustomQualifiedClassName(GenClass genClass) {
if (getCustomClassPackageSuffix() != null) {
return genClass.getGenPackage().getQualifiedPackageName() + "." + getCustomClassPackageSuffix() + "." + getCustomClassName(genClass);
} else {
return genClass.getGenPackage().getClassPackageName() + "." + getCustomClassName(genClass);
}
}
protected String getCustomProviderClassName(GenClass genClass) {
return MessageFormat.format(getGenGapModel().getCustomClassNamePattern(), genClass.getProviderClassName());
}
/**
* {@inheritDoc}
* @see org.eclipselabs.emf.loophole.internal.model.impl.BasicGenGapPackageImpl#getCustomQualifiedProviderClassName(org.eclipse.emf.codegen.ecore.genmodel.GenClass)
*/
@Override
public String getCustomQualifiedProviderClassName(GenClass genClass) {
if (getCustomProviderPackageSuffix() != null) {
return genClass.getGenPackage().getQualifiedPackageName() + "." + getCustomProviderPackageSuffix() + "." + getCustomProviderClassName(genClass);
} else {
return genPackage.getProviderPackageName() + "." + getCustomProviderClassName(genClass);
}
}
}