/*******************************************************************************
* Copyright (c) 2009 Oracle. All rights reserved.
* This program and the accompanying materials are 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:
*     Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.core.internal.jpa2.context.orm;

import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.internal.context.orm.AbstractOrmQuery;
import org.eclipse.jpt.core.jpa2.context.LockModeType_2_0;
import org.eclipse.jpt.core.jpa2.context.orm.OrmNamedQuery2_0;
import org.eclipse.jpt.core.resource.orm.XmlNamedQuery;

/**
 *  GenericOrmNamedQuery2_0
 */
public class GenericOrmNamedQuery2_0 extends AbstractOrmQuery<XmlNamedQuery>
	implements OrmNamedQuery2_0
{
	private LockModeType_2_0 specifiedLockMode;
	private LockModeType_2_0 defaultLockMode;

	// ********** constructor **********
	public GenericOrmNamedQuery2_0(XmlContextNode parent, XmlNamedQuery resourceNamedQuery) {
		super(parent, resourceNamedQuery);
	}

	// ********** NamedQuery2_0 implementation **********

	public LockModeType_2_0 getLockMode() {
		return (this.specifiedLockMode != null) ? this.specifiedLockMode : this.defaultLockMode;
	}

	public LockModeType_2_0 getSpecifiedLockMode() {
		return this.specifiedLockMode;
	}

	public void setSpecifiedLockMode(LockModeType_2_0 lockMode) {
		LockModeType_2_0 old = this.specifiedLockMode;
		this.specifiedLockMode = lockMode;
		this.getResourceQuery().setLockMode(LockModeType_2_0.toOrmResourceModel(lockMode));
		this.firePropertyChanged(SPECIFIED_LOCK_MODE_PROPERTY, old, lockMode);
	}

	public void setSpecifiedLockMode_(LockModeType_2_0 lockMode) {
		LockModeType_2_0 old = this.specifiedLockMode;
		this.specifiedLockMode = lockMode;
		this.firePropertyChanged(SPECIFIED_LOCK_MODE_PROPERTY, old, lockMode);
	}
	
	public LockModeType_2_0 getDefaultLockMode() {
		return this.defaultLockMode;
	}

	protected void setDefaultLockMode(LockModeType_2_0 lockMode) {
		LockModeType_2_0 old = this.defaultLockMode;
		this.defaultLockMode = lockMode;
		this.firePropertyChanged(DEFAULT_LOCK_MODE_PROPERTY, old, lockMode);
	}

	protected LockModeType_2_0 buildDefaultLockMode() {
		return LockModeType_2_0.NONE;
	}

	// ********** resource => context **********

	@Override
	protected void initialize(XmlNamedQuery xmlQuery) {
		super.initialize(xmlQuery);
		this.defaultLockMode = this.buildDefaultLockMode();
		this.specifiedLockMode = this.getResourceLockModeOf(xmlQuery);
	}

	@Override
	public void update(XmlNamedQuery xmlQuery) {
		super.update(xmlQuery);
		this.setSpecifiedLockMode_(this.getResourceLockModeOf(xmlQuery));
	}

	private LockModeType_2_0 getResourceLockModeOf(XmlNamedQuery xmlQuery) {
		return LockModeType_2_0.fromOrmResourceModel(xmlQuery.getLockMode());
	}
	
}
