/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.scplugin.model.adapter;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.persistence.internal.sessions.factories.model.login.AppendNewElementsOrderingPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.DescriptorLevelDocumentPreservationPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.DocumentPreservationPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.IgnoreNewElementsOrderingPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.NoDocumentPreservationPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.NodeOrderingPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.RelativePositionOrderingPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.XMLBinderPolicyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.XMLLoginConfig;
/**
* Session Configuration model adapter class for the
* TopLink Foudation Library class XMLLoginConfig
*
* @see XMLLoginConfig
*
* @author Tran Le
*/
public final class XMLLoginAdapter extends LoginAdapter {
public final static String EQUAL_NAMESPACE_RESOLVERS_PROPERTY = "equalNamespaceResolvers";
public final static String DOCUMENT_PRESERVATION_POLICY_PROPERTY = "documentPreservationPolicy";
public final static String DESCRIPTOR_LEVEL_DOCUMENT_PRESERVATION_POLICY = "Descriptor Level";
public final static String NO_DOCUMENT_PRESERVATION_POLICY = "No Document";
public final static String XML_BINDER_PRESERVATION_POLICY = "XML Binder";
public final static String NODE_ORDERING_POLICY_PROPERTY = "nodeOrderingPolicy";
public final static String APPEND_NEW_ELEMENTS = "Append New Elements";
public final static String IGNORE_NEW_ELEMENTS = "Ignore New Elements";
public final static String RELATIVE_POSITION = "Relative Position";
public final static String SAX_RUNTIME_PLATFORM_CLASS_NAME = "oracle.toplink.ox.platform.SAXPlatform";
public final static String DOM_RUNTIME_PLATFORM_CLASS_NAME = "oracle.toplink.ox.platform.DOMPlatform";
public final static String DEFAULT_PLATFORM_CLASS_NAME = SAX_RUNTIME_PLATFORM_CLASS_NAME;
/**
* Creates a new XMLLoginConfig for the specified model object.
*/
XMLLoginAdapter( SCAdapter parent, XMLLoginConfig scConfig) {
super( parent, scConfig);
}
/**
* Creates a new XMLLoginAdapter.
*/
protected XMLLoginAdapter( SCAdapter parent) {
super( parent);
}
@Override
protected void initializeDefaults() {
super.initializeDefaults();
this.setPlatformClass(getDefaultPlatformClassName());
this.setDocumentPreservationPolicy(NO_DOCUMENT_PRESERVATION_POLICY);
this.setNodeOrderingPolicy(APPEND_NEW_ELEMENTS);
}
@Override
protected void initializeFromModel(Object scConfig) {
super.initializeFromModel(scConfig);
if (getDocumentPreservationPolicyConfig() == null) {
setDocumentPreservationPolicy(NO_DOCUMENT_PRESERVATION_POLICY);
}
if (getNodeOrderingPolicyConfig() == null) {
setNodeOrderingPolicy(APPEND_NEW_ELEMENTS);
}
}
/**
* Factory method for building this model.
*/
protected Object buildModel() {
return new XMLLoginConfig();
}
private DocumentPreservationPolicyConfig getDocumentPreservationPolicyConfig() {
return login().getDocumentPreservationPolicy();
}
private NodeOrderingPolicyConfig getNodeOrderingPolicyConfig() {
return getDocumentPreservationPolicyConfig().getNodeOrderingPolicy();
}
/**
* Returns the datasource platform class from user's preference.
*/
protected String getDefaultPlatformClassName() {
return DEFAULT_PLATFORM_CLASS_NAME;
}
public Collection<String> getPlatformClassOptions() {
Collection<String> values = new ArrayList<String>(2);
values.add(XMLLoginAdapter.SAX_RUNTIME_PLATFORM_CLASS_NAME);
values.add(XMLLoginAdapter.DOM_RUNTIME_PLATFORM_CLASS_NAME);
return values;
}
public Collection<String> getDocumentPreservationPolicyOptions() {
Collection<String> values = new ArrayList<String>(3);
values.add(NO_DOCUMENT_PRESERVATION_POLICY);
values.add(DESCRIPTOR_LEVEL_DOCUMENT_PRESERVATION_POLICY);
values.add(XML_BINDER_PRESERVATION_POLICY);
return values;
}
public Collection<String> getNodeOrderingPolicyOptions() {
Collection<String> values = new ArrayList<String>(3);
values.add(APPEND_NEW_ELEMENTS);
values.add(IGNORE_NEW_ELEMENTS);
values.add(RELATIVE_POSITION);
return values;
}
boolean platformIsXml() {
return true;
}
/**
* Returns the adapter's Config Model Object.
*/
private final XMLLoginConfig login() {
return ( XMLLoginConfig)this.getModel();
}
public boolean isEqualNamespaceResolvers() {
return this.login().getEqualNamespaceResolvers();
}
public void setEqualNamespaceResolvers(boolean value) {
boolean old = this.login().getEqualNamespaceResolvers();
this.login().setEqualNamespaceResolvers(value);
this.firePropertyChanged(EQUAL_NAMESPACE_RESOLVERS_PROPERTY, old, value);
}
public String getDocumentPreservationPolicyType() {
if (getDocumentPreservationPolicyConfig() instanceof DescriptorLevelDocumentPreservationPolicyConfig) {
return DESCRIPTOR_LEVEL_DOCUMENT_PRESERVATION_POLICY;
} else if (getDocumentPreservationPolicyConfig() instanceof NoDocumentPreservationPolicyConfig) {
return NO_DOCUMENT_PRESERVATION_POLICY;
} else if (getDocumentPreservationPolicyConfig() instanceof XMLBinderPolicyConfig) {
return XML_BINDER_PRESERVATION_POLICY;
} else {
throw new IllegalStateException("Invalid document preservation policy type.");
}
}
public void setDocumentPreservationPolicy(String policyType) {
Object old = login().getDocumentPreservationPolicy();
DocumentPreservationPolicyConfig config = this.setConfigDocumentPreservationPolicy(policyType);
this.setNodeOrderingPolicy(APPEND_NEW_ELEMENTS);
this.firePropertyChanged(DOCUMENT_PRESERVATION_POLICY_PROPERTY, old, config);
}
private DocumentPreservationPolicyConfig setConfigDocumentPreservationPolicy(String policyType) {
DocumentPreservationPolicyConfig config = null;
if (NO_DOCUMENT_PRESERVATION_POLICY.equals(policyType)) {
config = new NoDocumentPreservationPolicyConfig();
login().setDocumentPreservationPolicy(config);
} else if (DESCRIPTOR_LEVEL_DOCUMENT_PRESERVATION_POLICY.equals(policyType)) {
config = new DescriptorLevelDocumentPreservationPolicyConfig();
login().setDocumentPreservationPolicy(config);
} else if (XML_BINDER_PRESERVATION_POLICY.equals(policyType)) {
config = new XMLBinderPolicyConfig();
login().setDocumentPreservationPolicy(config);
}
return config;
}
public String getNodeOrderingPolicyType() {
if (getNodeOrderingPolicyConfig() instanceof AppendNewElementsOrderingPolicyConfig) {
return APPEND_NEW_ELEMENTS;
} else if (getNodeOrderingPolicyConfig() instanceof IgnoreNewElementsOrderingPolicyConfig) {
return IGNORE_NEW_ELEMENTS;
} else if (getNodeOrderingPolicyConfig() instanceof RelativePositionOrderingPolicyConfig) {
return RELATIVE_POSITION;
} else {
throw new IllegalStateException("Invalid node ordering policy type.");
}
}
public void setNodeOrderingPolicy(String policyType) {
Object old = this.getNodeOrderingPolicyConfig();
NodeOrderingPolicyConfig config = this.setConfigNodeOrderingPolicy(policyType);
this.firePropertyChanged(NODE_ORDERING_POLICY_PROPERTY, old, config);
}
private NodeOrderingPolicyConfig setConfigNodeOrderingPolicy(String policyType) {
NodeOrderingPolicyConfig config = null;
if (APPEND_NEW_ELEMENTS.equals(policyType)) {
config = new AppendNewElementsOrderingPolicyConfig();
getDocumentPreservationPolicyConfig().setNodeOrderingPolicy(config);
} else if (IGNORE_NEW_ELEMENTS.equals(policyType)) {
config = new IgnoreNewElementsOrderingPolicyConfig();
getDocumentPreservationPolicyConfig().setNodeOrderingPolicy(config);
} else if (RELATIVE_POSITION.equals(policyType)) {
config = new RelativePositionOrderingPolicyConfig();
getDocumentPreservationPolicyConfig().setNodeOrderingPolicy(config);
}
return config;
}
}