/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.model.edit.prop; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.edit.DBEPersistAction; import org.jkiss.dbeaver.model.DBPObject; import org.jkiss.dbeaver.model.edit.DBECommand; import org.jkiss.dbeaver.model.impl.edit.DBECommandAbstract; import java.util.Map; /** * Abstract object command */ public class DBECommandProperty<OBJECT_TYPE extends DBPObject> extends DBECommandAbstract<OBJECT_TYPE> { //public static final String PROP_COMPOSITE_COMMAND = ".composite"; private DBEPropertyHandler<OBJECT_TYPE> handler; private Object oldValue; private Object newValue; public DBECommandProperty(OBJECT_TYPE object, DBEPropertyHandler<OBJECT_TYPE> handler) { super(object, "Property '" + handler + "' change"); this.handler = handler; } public DBECommandProperty(OBJECT_TYPE object, DBEPropertyHandler<OBJECT_TYPE> handler, Object oldValue, Object newValue) { this(object, handler); this.oldValue = oldValue; this.newValue = newValue; if (handler instanceof DBEPropertyReflector) { ((DBEPropertyReflector<OBJECT_TYPE>)handler).reflectValueChange(getObject(), oldValue, this.newValue); } } public DBEPropertyHandler<OBJECT_TYPE> getHandler() { return handler; } public Object getOldValue() { return oldValue; } public Object getNewValue() { return newValue; } public void setNewValue(Object newValue) { this.newValue = newValue; if (handler instanceof DBEPropertyReflector) { ((DBEPropertyReflector<OBJECT_TYPE>)handler).reflectValueChange(getObject(), oldValue, this.newValue); } } public void resetValue() { this.newValue = this.oldValue; } @Override public DBECommand<?> merge(DBECommand<?> prevCommand, Map<Object, Object> userParams) { if (!(prevCommand instanceof DBECommandProperty) || prevCommand.getObject() != getObject()) { // Dunno what to do with it //return this; } DBECommandComposite compositeCommand = (DBECommandComposite)userParams.get(getObject()); if (compositeCommand == null) { compositeCommand = handler.createCompositeCommand(getObject()); userParams.put(getObject(), compositeCommand); } compositeCommand.addPropertyHandler(handler, newValue); return compositeCommand; } @Override public void validateCommand() throws DBException { if (handler instanceof DBEPropertyValidator) { ((DBEPropertyValidator<OBJECT_TYPE>)handler).validate(getObject(), newValue); } } @Override public void updateModel() { if (handler instanceof DBEPropertyUpdater) { ((DBEPropertyUpdater<OBJECT_TYPE>)handler).updateModel(getObject(), newValue); } } @Override public DBEPersistAction[] getPersistActions() { if (handler instanceof DBEPropertyPersister) { return ((DBEPropertyPersister<OBJECT_TYPE>)handler).getPersistActions(getObject(), newValue); } return null; } }