blob: 8790c30a18592b78ac8f2ddbc5c84c2a0b7ba6d5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2016 EclipseSource Muenchen GmbH and others.
*
* 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:
* Eugen Neufeld - initial API and implementation
******************************************************************************/
package org.eclipse.emfforms.internal.core.services.controlmapper;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emfforms.spi.common.report.AbstractReport;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.domainexpander.EMFFormsDomainExpander;
import org.eclipse.emfforms.spi.core.services.domainexpander.EMFFormsExpandingFailedException;
import org.eclipse.emfforms.spi.core.services.view.EMFFormsViewContext;
/**
* Helper class to expand eobjects.
*
* @author Eugen Neufeld
*
*/
public final class SettingToControlExpandHelper {
private SettingToControlExpandHelper() {
}
/**
* Resolve all domain model references for a given resolvable and a given domain model root.
*
* @param resolvable The EObject to resolve all {@link VDomainModelReference domain model references} of.
* @param domainModelRoot the domain model used for the resolving.
* @param viewModelContext The {@link EMFFormsViewContext}
*/
public static void resolveDomainReferences(EObject resolvable, EObject domainModelRoot,
EMFFormsViewContext viewModelContext) {
// Get domain expander service
final EMFFormsDomainExpander domainExpander = viewModelContext
.getService(EMFFormsDomainExpander.class);
if (domainExpander == null) {
return;
}
expandAndInitDMR(domainModelRoot, domainExpander, resolvable, viewModelContext);
// Iterate over all domain model references of the given EObject.
final TreeIterator<EObject> eAllContents = resolvable.eAllContents();
while (eAllContents.hasNext()) {
final EObject eObject = eAllContents.next();
expandAndInitDMR(domainModelRoot, domainExpander, eObject, viewModelContext);
}
}
@SuppressWarnings("deprecation")
private static void expandAndInitDMR(EObject domainModelRoot, final EMFFormsDomainExpander domainExpander,
final EObject eObject, EMFFormsViewContext viewModelContext) {
if (VDomainModelReference.class.isInstance(eObject)
&& !VDomainModelReference.class.isInstance(eObject.eContainer())) {
final VDomainModelReference domainModelReference = VDomainModelReference.class.cast(eObject);
// FIXME remove
domainModelReference.init(domainModelRoot);
try {
domainExpander.prepareDomainObject(domainModelReference, domainModelRoot);
} catch (final EMFFormsExpandingFailedException ex) {
viewModelContext.getService(ReportService.class)
.report(new AbstractReport(ex));
}
}
}
}