/******************************************************************************* * Copyright (c) 2000, 2005 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.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); }