/* This file is part of Green.
*
* Copyright (C) 2005 The Research Foundation of State University of New York
* All Rights Under Copyright Reserved, The Research Foundation of S.U.N.Y.
*
* Green is free software, licensed under the terms of the Eclipse
* Public License, version 1.0. The license is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package edu.buffalo.cse.green.editor.model;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE_HEIGHT;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE_TEXT;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE_WIDTH;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE_X;
import static edu.buffalo.cse.green.constants.XMLConstants.XML_NOTE_Y;
import static edu.buffalo.cse.green.editor.controller.PropertyChange.Note;
import static org.eclipse.jface.window.Window.OK;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.jdt.core.IJavaElement;
import edu.buffalo.cse.green.editor.DiagramEditor;
import edu.buffalo.cse.green.editor.action.ContextAction;
import edu.buffalo.cse.green.editor.controller.NotePart;
import edu.buffalo.cse.green.editor.model.commands.DeleteCommand;
import edu.buffalo.cse.green.editor.model.commands.DeleteNoteCommand;
import edu.buffalo.cse.green.xml.XMLConverter;
/**
* Creates a note that displays a message in the diagram.
*
* @author hk47
* @author zgwang
*/
public class NoteModel extends AbstractModel<AbstractModel, RootModel, IJavaElement> {
private String _label;
public NoteModel() {
_label = "Double Click to Edit";
}
public NoteModel(String label) {
_label = parseHTML(label);
}
/**
* Sets the text displayed in the note.
*/
public void setLabel(String mesg) {
String oldMesg = _label;
_label = parseHTML(mesg);
firePropertyChange(Note, oldMesg, _label);
}
/**
* Returns the text displayed in the note.
*/
public String getLabel() {
return _label;
}
/**
* Converts certain HTML 4.0 character reference entities to their
* corresponding characters to be displayed in the note
*
* @return parsed version of the given text
*
* @author zgwang
*/
private String parseHTML(String text) {
String converted;
converted = text;
converted = converted.replace("<", "<");
converted = converted.replace(">", ">");
converted = converted.replace(""", "\"");
return converted;
}
/**
* Converts special characters in the note text to character entity
* references as defined by HTML 4.0
*
* @return encoded version of the note text
*
* @author zgwang
*/
private String toHTML() {
String converted;
converted = _label;
converted = converted.replace("<", "<");
converted = converted.replace(">", ">");
converted = converted.replace("\"", """);
return converted;
}
/**
* Writes the XML stored for this note to the converter.
*/
public void toXML(XMLConverter converter) {
converter.pushHeader(XML_NOTE);
converter.writeKey(XML_NOTE_TEXT, toHTML());
converter.writeKey(XML_NOTE_HEIGHT, "" + getSize().height);
converter.writeKey(XML_NOTE_WIDTH, "" + getSize().width);
converter.writeKey(XML_NOTE_X, "" + getLocation().x);
converter.writeKey(XML_NOTE_Y, "" + getLocation().y);
super.toXML(converter);
converter.popHeader();
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#getContextMenuFlag()
*/
public int getContextMenuFlag() {
return ContextAction.CM_NOTE;
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#getDeleteCommand(edu.buffalo.cse.green.editor.DiagramEditor)
*/
public DeleteCommand getDeleteCommand(DiagramEditor editor) {
return new DeleteNoteCommand(this);
}
/**
* @param editor - The <code>DiagramEditor</code> containing this model.
*
* @return A command to hide this model.
*/
public Command getHideCommand(DiagramEditor editor) {
return null;
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#getPartClass()
*/
public Class getPartClass() {
return NotePart.class;
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#getJavaElement()
*/
public IJavaElement getJavaElement() {
return null;
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#removeFromParent()
*/
public void removeFromParent() {
getParent().removeChild(this);
}
/**
* @see java.lang.Object#toString()
*/
public String toString() {
return getLabel();
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#handleDispose()
*/
public void handleDispose() {
// do nothing
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#invokeCreationDialog(org.eclipse.gef.palette.ToolEntry)
*/
public int invokeCreationDialog(ToolEntry tool) {
return OK;
}
/**
* @see edu.buffalo.cse.green.editor.model.AbstractModel#createNewInstance(edu.buffalo.cse.green.editor.model.AbstractModel)
*/
public void createNewInstance(AbstractModel model) {
// make sure we don't have a miniscule model
if (model.getSize() == null || model.getSize().height < 5
|| model.getSize().width < 5) {
model.setSize(new Dimension(150, 50));
}
getRootModel().addChild((NoteModel) model);
}
}