/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.foundation.wkf.ws;
import java.util.logging.Logger;
import org.openflexo.foundation.FlexoModelObject;
import org.openflexo.foundation.bindings.AbstractBinding;
import org.openflexo.foundation.bindings.Bindable;
import org.openflexo.foundation.bindings.BindingModel;
import org.openflexo.foundation.bindings.BindingValue;
import org.openflexo.foundation.rm.XMLStorageResourceData;
import org.openflexo.foundation.wkf.edge.MessageEdge;
import org.openflexo.foundation.xml.FlexoComponentBuilder;
import org.openflexo.foundation.xml.FlexoProcessBuilder;
import org.openflexo.inspector.InspectableObject;
/**
* Please comment this class
*
* @author sguerin
*
*/
public class MessageEntryBinding extends FlexoModelObject implements InspectableObject, Bindable {
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger(MessageBindings.class.getPackage().getName());
private MessageBindings _messageBindings;
private MessageEntry _bindingDefinition;
private String _bindingDefinitionName;
private AbstractBinding _bindingValue;
/**
* Constructor used by XMLCoDe in the context of process deserialization
*
* @param builder
*/
public MessageEntryBinding(FlexoProcessBuilder builder) {
super(builder.getProject());
initializeDeserialization(builder);
}
/**
* Constructor used by XMLCoDe in the context of component deserialization
*
* @param builder
*/
public MessageEntryBinding(FlexoComponentBuilder builder) {
super(builder.getProject());
initializeDeserialization(builder);
}
public MessageEntryBinding(MessageBindings messageBindings, MessageEntry bindingDefinition) {
super(messageBindings.getProject());
setMessageBindings(messageBindings);
setBindingDefinition(bindingDefinition);
}
public MessageEntryBinding(MessageBindings messageBindings, MessageEntry bindingDefinition, BindingValue value) {
this(messageBindings, bindingDefinition);
setBindingValue(value);
}
@Override
public BindingModel getBindingModel() {
if (_messageBindings != null) {
return _messageBindings.getBindingModel();
}
return null;
}
public MessageEntry getBindingDefinition() {
lookupBindingDefinition();
return _bindingDefinition;
}
public void lookupBindingDefinition() {
// logger.info("lookupMessageDefinition() for "+getBindingDefinitionName()+" "+getBindingValue());
// logger.info("_bindingDefinition="+_bindingDefinition);
// logger.info("_messageBindings="+_messageBindings);
// if (_messageBindings!=null) logger.info("_messageBindings.getMessageDefinition()="+_messageBindings.getMessageDefinition());
// logger.info("_bindingDefinitionName="+_bindingDefinitionName);
if (_bindingDefinition == null && _messageBindings != null && _messageBindings.getMessageDefinition() != null
&& _bindingDefinitionName != null) {
_bindingDefinition = _messageBindings.getMessageDefinition().entryWithName(_bindingDefinitionName);
if (getBindingValue() != null) {
if (getBindingValue().getBindingDefinition() == null) {
getBindingValue().setBindingDefinition(_bindingDefinition);
}
}
}
}
public void setBindingDefinition(MessageEntry messageEntry) {
_bindingDefinition = messageEntry;
if (_bindingValue != null) {
_bindingValue.setBindingDefinition(messageEntry);
}
setChanged();
}
public String getBindingDefinitionName() {
if (_bindingDefinition != null) {
return _bindingDefinition.getVariableName();
}
return _bindingDefinitionName;
}
public void setBindingDefinitionName(String bindingDefinitionName) {
_bindingDefinitionName = bindingDefinitionName;
if (_messageBindings != null) {
setBindingDefinition(_messageBindings.getMessageDefinition().entryWithName(_bindingDefinitionName));
}
setChanged();
}
public MessageBindings getMessageBindings() {
return _messageBindings;
}
public void setMessageBindings(MessageBindings messageBindings) {
_messageBindings = messageBindings;
if (_bindingValue != null && getMessageEdge() != null) {
_bindingValue.setOwner(getMessageEdge());
}
if (_messageBindings != null && _messageBindings.getMessageDefinition() != null) {
if (_bindingDefinitionName != null) {
setBindingDefinition(_messageBindings.getMessageDefinition().entryWithName(_bindingDefinitionName));
}
}
}
public MessageEdge getMessageEdge() {
return getMessageBindings().getMessageEdge();
}
public AbstractBinding getBindingValue() {
return _bindingValue;
}
public void setBindingValue(AbstractBinding value) {
_bindingValue = value;
if (_bindingValue != null) {
if (_bindingValue.getBindingDefinition() == null) {
_bindingValue.setBindingDefinition(getBindingDefinition());
}
}
setChanged();
}
@Override
public String getFullyQualifiedName() {
return (_messageBindings != null ? _messageBindings.getFullyQualifiedName() : "null") + "." + getBindingDefinitionName() + "="
+ (getBindingValue() == null ? "null" : getBindingValue().getStringRepresentation());
}
@Override
public XMLStorageResourceData getXMLResourceData() {
if (_messageBindings != null) {
return _messageBindings.getXMLResourceData();
}
return null;
}
@Override
public String getInspectorName() {
// never inspected by its own
return null;
}
/**
* Overrides getClassNameKey
*
* @see org.openflexo.foundation.FlexoModelObject#getClassNameKey()
*/
@Override
public String getClassNameKey() {
return "message_entry_binding";
}
}