/******************************************************************************* * 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.text.MessageFormat; import java.util.*; import org.jboss.tools.common.meta.*; import org.jboss.tools.common.model.*; import org.jboss.tools.common.meta.action.*; import org.jboss.tools.common.model.undo.*; public class DefaultEditHandler extends DefaultCreateHandler { public DefaultEditHandler() {} public void executeHandler(XModelObject object, Properties prop) throws XModelException { if(!isEnabled(object) || data == null) return; Properties p = extractProperties(data[0]); setOtherProperties(object, p); edit(object, p); } public XEntityData[] getEntityData(XModelObject object) { super.getEntityData(object); if(data.length > 0) { XAttributeData[] ad = data[0].getAttributeData(); for (int i = 0; i < ad.length; i++) { String n = ad[i].getAttribute().getName(); String v = object.getAttributeValue(n); if(v != null) ad[i].setValue(v); v = action.getProperty("attribute." + n); //$NON-NLS-1$ if(v != null) ad[i].setValue(v); } } return data; } public static void edit(XModelObject object, Properties p, boolean openTransaction) throws XModelException { if(!openTransaction) { edit(object, p); return; } XUndoManager undo = object.getModel().getUndoManager(); XTransactionUndo u = new XTransactionUndo(MessageFormat.format("Edit {0}", DefaultCreateHandler.title(object, false)), XTransactionUndo.EDIT); undo.addUndoable(u); long stamp = object.getTimeStamp(); try { edit(object, p); if(stamp == object.getTimeStamp()) undo.rollbackTransactionInProgress(); } catch (Exception e) { undo.rollbackTransactionInProgress(); XModelException.rethrow(e); } finally { u.commit(); } } public static void edit(XModelObject object, Properties p) throws XModelException { XModelEntity e = object.getModelEntity(); Enumeration en = p.keys(); boolean active = object.isActive(); while(en.hasMoreElements()) { String n = (String)en.nextElement(); if(e.getAttribute(n) == null) continue; String v = p.getProperty(n); if(!active) object.setAttributeValue(n, v); else object.getModel().changeObjectAttribute(object, n, v); } } }