/*******************************************************************************
 * Copyright (c) 2000, 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.compare;

/**
 * Common interface for objects with editable contents.
 * Typically it is implemented by objects that also implement
 * the <code>IStreamContentAccessor</code> interface.
 * <p>
 * Clients may implement this interface.
 * <p>
 * Note that implementing <code>IEditableContent</code> does not
 * automatically mean that it is editable. An object is only editable if
 * it implements <code>IEditableContent</code> and the <code>isEditable</code> method returns <code>true</code>.
 *
 * @see IStreamContentAccessor
 */
public interface IEditableContent {

	/**
	 * Returns <code>true</code> if this object can be modified.
	 * If it returns <code>false</code> the other methods of this API must not be called.
	 *
	 * @return <code>true</code> if this object can be modified
	 */
	boolean isEditable();

	/**
	 * Replaces the current content with the given new bytes.
	 *
	 * @param newContent this new contents replaces the old contents
	 */
	void setContent(byte[] newContent);

	/**
	 * This method is called on a parent to add or remove a child,
	 * or to copy the contents of a child.
	 *
	 * What to do is encoded in the two arguments as follows:
	 * <TABLE>
	 * <TR>
	 * 	<TD>add:</TD>
	 *  <TD>dest == null</TD>
	 *  <TD>src != null</TD>
	 * </TR>
	 * <TR>
	 * 	<TD>remove:</TD>
	 *  <TD>dest != null</TD>
	 *  <TD>src == null</TD>
	 * </TR>
	 * <TR>
	 * 	<TD>copy:</TD>
	 *  <TD>dest != null</TD>
	 *  <TD>src != null</TD>
	 * </TR>
	 * </TABLE>
	 * @param dest the existing child of this object to be replaced; if <code>null</code> a new child can be added.
	 * @param src the new child to be added or replaced; if <code>null</code> an existing child can be removed.
	 * @return the argument <code>dest</code>
	 */
	ITypedElement replace(ITypedElement dest, ITypedElement src);
}
