/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.meta.action.impl.handlers;
import java.util.*;
import org.jboss.tools.common.meta.action.XAction;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.engines.impl.EnginesLoader;
import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
public class ReplaceWithNewHandler extends DefaultCreateHandler {
public void executeHandler(XModelObject object, Properties prop) throws XModelException {
if(!isEnabled(object) || data == null || data.length == 0) return;
String entity = getEntityName();
Properties p = extractProperties(data[0]);
setOtherProperties(object, p);
XModelObject c = XModelObjectLoaderUtil.createValidObject(object.getModel(), entity, p);
c = modifyCreatedObject(c);
XModelObject oc = findExistingChild(object, action);
if(oc != null) {
if(oc.getModelEntity() == c.getModelEntity()) {
EnginesLoader.merge(oc, c, true);
} else {
DefaultRemoveHandler.removeFromParent(oc);
addCreatedObject(object, c, p);
}
} else {
addCreatedObject(object, c, p);
}
}
public boolean getSignificantFlag(XModelObject object) {
return (findExistingChild(object, action) != null);
}
public static XModelObject findExistingChild(XModelObject object, XAction action) {
XModelObject child = null;
String childEntity = action.getProperty("childEntity"); //$NON-NLS-1$
if(childEntity != null) {
XModelObject[] os = object.getChildren(childEntity);
if(os.length > 0) child = os[0];
} else {
String childName = action.getProperty("child"); //$NON-NLS-1$
child = object.getChildByPath(childName);
}
return child;
}
}