/***************************************************************************************************
 * Copyright (c) 2003, 2004 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
 **************************************************************************************************/
package org.eclipse.wst.common.frameworks.internal.operations;

import java.util.ArrayList;

import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;



public class DMComposedExtendedOperationHolder {

	private ArrayList preOps = null;
	private ArrayList postOps = null;

	/**
	 * 
	 */
	protected DMComposedExtendedOperationHolder() {
		super();
	}

	protected void addPreOperation(IDataModelOperation preOp) {
		if (preOps == null) {
			preOps = new ArrayList();
		}
		preOps.add(preOp);
	}

	protected void addPostOperation(IDataModelOperation postOp) {
		if (postOps == null) {
			postOps = new ArrayList();
		}
		postOps.add(postOp);
	}

	public boolean hasPreOps() {
		return preOps != null;
	}

	public boolean hasPostOps() {
		return postOps != null;
	}

	public ArrayList getPostOps() {
		return postOps;
	}

	public ArrayList getPreOps() {
		return preOps;
	}

}