blob: fa02cd1599d0a6f333d5235e678aae04fbabe43a [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
* 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
* https://www.eclipse.org/legal/epl-v2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thales Corporate Services S.A.S - initial API and implementation
*
* </copyright>
*/
package org.eclipse.egf.portfolio.eclipse.build.buildcore.migration;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.egf.portfolio.eclipse.build.GenerationHelper;
import org.eclipse.egf.portfolio.eclipse.build.buildcore.Job;
import org.eclipse.egf.portfolio.eclipse.build.builddeploy.BuilddeployFactory;
import org.eclipse.egf.portfolio.eclipse.build.builddeploy.HudsonDeployment;
import org.eclipse.egf.portfolio.eclipse.build.builddeploy.Trigger;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.BuildStep;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.BuildstepFactory;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.CLEAN_TYPE;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.CleanStep;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.EgfActivity;
import org.eclipse.egf.portfolio.eclipse.build.buildstep.EgfStep;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler;
import org.eclipse.emf.ecore.xml.type.AnyType;
/**
* @author Matthieu Helleboid
*
*/
@SuppressWarnings("rawtypes")
public class BuildcoreResourceHandler extends BasicResourceHandler {
@Override
public void postLoad(XMLResource resource, InputStream inputStream,
Map<?, ?> options) {
final Map extMap = resource.getEObjectToExtensionMap();
for (Iterator itr = extMap.entrySet().iterator(); itr.hasNext();) {
Map.Entry entry = (Map.Entry) itr.next();
EObject key = (EObject) entry.getKey();
AnyType value = (AnyType) entry.getValue();
handleUnknownData(key, value);
}
}
private void handleUnknownData(EObject eObj, AnyType unknownData) {
handleUnknownFeatures(eObj, unknownData.getMixed());
handleUnknownFeatures(eObj, unknownData.getAnyAttribute());
}
private void handleUnknownFeatures(EObject owner, FeatureMap featureMap) {
FeatureMap.Entry[] entries = featureMap.toArray(new FeatureMap.Entry[0]);
for (FeatureMap.Entry entry : entries) {
EStructuralFeature structuralFeature = entry.getEStructuralFeature();
if (handleUnknownFeature(owner, structuralFeature, entry.getValue())) {
featureMap.remove(entry);
}
}
}
private boolean handleUnknownFeature(EObject owner,
EStructuralFeature structuralFeature, Object value) {
if ("activities".equals(structuralFeature.getName()) && owner instanceof EgfStep) {
//replace activities EString by EGFActivity
EgfStep egfStep = (EgfStep) owner;
String uri = (String) ((AnyType) value).getMixed().get(0).getValue();
EgfActivity egfActivity = BuildstepFactory.eINSTANCE.createEgfActivity();
egfActivity.setUri(uri);
egfStep.getEgfActivities().add(egfActivity);
return true;
}
if ("triggers".equals(structuralFeature.getName()) && owner instanceof Job && value instanceof Trigger) {
Job job = (Job) owner;
HudsonDeployment hudsonDeployment = (HudsonDeployment) job.getDeployment();
if (hudsonDeployment == null) {
hudsonDeployment = BuilddeployFactory.eINSTANCE.createHudsonDeployment();
job.setDeployment(hudsonDeployment);
}
hudsonDeployment.getTriggers().add((Trigger) value);
return true;
}
if ("cleanBeforeBuild".equals(structuralFeature.getName()) && owner instanceof BuildStep) {
CLEAN_TYPE cleanType = CLEAN_TYPE.get((String) value);
if (cleanType == CLEAN_TYPE.NOTHING) {
//No need for a clean step
return true;
}
BuildStep buildStep = (BuildStep) owner;
Job job = new GenerationHelper().getJob(buildStep);
CleanStep cleanStep = BuildstepFactory.eINSTANCE.createCleanStep();
cleanStep.setType(cleanType);
int indexOf = job.getSteps().indexOf(buildStep);
job.getSteps().add(indexOf, cleanStep);
return true;
}
return false;
}
}