JBoss Tools SVN: r6162 - branches/jbosstools-2.0.x/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views.
by jbosstools-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2008-02-07 09:01:12 -0500 (Thu, 07 Feb 2008)
New Revision: 6162
Modified:
branches/jbosstools-2.0.x/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views/ConfigurationsViewActionGroup.java
Log:
JBIDE-1752 broken null check
Modified: branches/jbosstools-2.0.x/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views/ConfigurationsViewActionGroup.java
===================================================================
--- branches/jbosstools-2.0.x/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views/ConfigurationsViewActionGroup.java 2008-02-07 13:50:45 UTC (rev 6161)
+++ branches/jbosstools-2.0.x/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/console/views/ConfigurationsViewActionGroup.java 2008-02-07 14:01:12 UTC (rev 6162)
@@ -138,8 +138,8 @@
menu.add(schemaExportAction);
}
menu.add(new Separator() );
- if (first instanceof PersistentClass
- || first.getClass() == Property.class){
+ // TODO: shouldn't these and maybe the others not be defined via menu extension points ?
+ if (first != null && (first instanceof PersistentClass || first.getClass() == Property.class)) {
menu.add(openSourceAction);
menu.add(openMappingAction);
}
16 years, 4 months
JBoss Tools SVN: r6161 - trunk/documentation/guides/userguide/GettingStartedGuide/en/modules.
by jbosstools-commits@lists.jboss.org
Author: ykryvinchanka
Date: 2008-02-07 08:50:45 -0500 (Thu, 07 Feb 2008)
New Revision: 6161
Modified:
trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/getting_started.xml
trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/jsp_application.xml
trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/rad_jsf_application.xml
Log:
http://jira.jboss.com/jira/browse/JBDS-235 some corrections in text
Modified: trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/getting_started.xml
===================================================================
--- trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/getting_started.xml 2008-02-07 13:50:07 UTC (rev 6160)
+++ trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/getting_started.xml 2008-02-07 13:50:45 UTC (rev 6161)
@@ -528,9 +528,7 @@
so that you don't need to download any additional software and can test your
application in a Web browser right away.</para>
<para>If you want to use a different JBoss server installation, after JBoss Developer Studio is
- installed open Servers View (select <emphasis>
- <property>Window > Show View > Others > Server > Servers</property>
- </emphasis>), then right click on this <emphasis>
+ installed open Servers View (select <emphasis><property>Window > Show View > Others > Server > Servers</property>),</emphasis> then right click on this <emphasis>
<property>view > New > Server</property>
</emphasis> and follow the wizards steps to point to another Jboss server installation.</para>
<para>JBoss Developer Studio works with any servlet container, not just JBoss. For more
@@ -562,9 +560,8 @@
<para>
<emphasis role="bold">Can I import a .war file?</emphasis>
</para>
- <para>Yes. Select <emphasis>
- <property>File > Import > Web > WAR file</property>
- </emphasis>, then follow importing steps.</para>
+ <para>Yes. Select <emphasis><property>File > Import > Web > WAR file</property>,
+ </emphasis> then follow importing steps.</para>
</section>
<section id="Troubleshooting">
<title>Troubleshooting, Problems, Configuration, Error Messages</title>
Modified: trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/jsp_application.xml
===================================================================
--- trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/jsp_application.xml 2008-02-07 13:50:07 UTC (rev 6160)
+++ trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/jsp_application.xml 2008-02-07 13:50:45 UTC (rev 6161)
@@ -84,9 +84,8 @@
"Hello World!" message.</para>
<itemizedlist continuation="continues">
<listitem>
- <para>Right click <emphasis>
- <property>WebContent > New > JSP</property>
- </emphasis>.</para>
+ <para>Right click <emphasis><property>WebContent > New > JSP</property>.
+ </emphasis></para>
</listitem>
<listitem>
<para>Type "hello.jsp" for a file name and click the <emphasis>
@@ -261,8 +260,8 @@
</listitem>
<listitem>
<para>Click <emphasis>
- <property>Finish</property>
- </emphasis>. The <emphasis>.war</emphasis> file will appear in Package
+ <property>Finish</property>.
+ </emphasis> The <emphasis>.war</emphasis> file will appear in Package
Explorer and in Project archives view as structure tree: <figure>
<title>Archive is Created</title>
<mediaobject>
@@ -366,12 +365,12 @@
<itemizedlist continuation="continues">
<listitem>
<para>Click the Run icon or right click your project folder and select <emphasis>
- <property>Run As > Run on Server</property>
- </emphasis>. If you haven't made any changes in web.xml file or
+ <property>Run As > Run on Server</property>.
+ </emphasis> If you haven't made any changes in web.xml file or
cleared it out you can launch the application by right clicking the
hello.jsp page and selecting <emphasis>
- <property>Run on the Server</property>
- </emphasis>.</para>
+ <property>Run on the Server</property>.
+ </emphasis></para>
</listitem>
</itemizedlist>
<figure>
Modified: trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/rad_jsf_application.xml
===================================================================
--- trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/rad_jsf_application.xml 2008-02-07 13:50:07 UTC (rev 6160)
+++ trunk/documentation/guides/userguide/GettingStartedGuide/en/modules/rad_jsf_application.xml 2008-02-07 13:50:45 UTC (rev 6161)
@@ -38,8 +38,8 @@
<listitem>
<para>In Web Projects View (if it is not open select <emphasis>
<property>Window > Show View > Others > JBoss Tools Web
- > Web Projects View</property>
- </emphasis>) click <emphasis>
+ > Web Projects View</property>)
+ </emphasis> click <emphasis>
<property>Create New JSF Project</property>
</emphasis> button. <figure>
<title>Create New JSF Project</title>
@@ -643,8 +643,8 @@
</listitem>
<listitem>
<para>Click on <emphasis>
- <property>outputText</property>
- </emphasis>, drag the cursor over to the editor, and drop it inside the blue
+ <property>outputText</property>,
+ </emphasis> drag the cursor over to the editor, and drop it inside the blue
box in the editor</para>
</listitem>
@@ -677,8 +677,8 @@
<para>Select <emphasis>
<property>how_to_play</property>
</emphasis> value and click <emphasis>
- <property>Ok</property>
- </emphasis>. Then click <emphasis>
+ <property>Ok</property>.
+ </emphasis> Then click <emphasis>
<property>Finish</property>
</emphasis>
<figure>
@@ -718,8 +718,8 @@
</listitem>
<listitem>
<para>On the Palette click on <emphasis>
- <property>inputText</property>
- </emphasis>, drag the cursor over to the editor, and drop it inside the
+ <property>inputText</property>,
+ </emphasis> drag the cursor over to the editor, and drop it inside the
editor after the text.</para>
</listitem>
<listitem>
@@ -736,8 +736,8 @@
</listitem>
<listitem>
<para>On the Palette click on <emphasis>
- <property>inputText</property>
- </emphasis>, drag the cursor over to the editor, and drop it inside the
+ <property>inputText</property>,
+ </emphasis> drag the cursor over to the editor, and drop it inside the
editor after the text</para>
</listitem>
<listitem>
@@ -805,8 +805,8 @@
<itemizedlist>
<listitem>
<para>Click <emphasis>
- <property>Ok</property>
- </emphasis>, then click <emphasis>
+ <property>Ok</property>,
+ </emphasis> then click <emphasis>
<property>Finish</property>
</emphasis></para>
</listitem>
@@ -836,8 +836,8 @@
</listitem>
<listitem>
<para>On the Palette, click on <emphasis>
- <property>commandButton</property>
- </emphasis>, drag the cursor over to the editor, and drop it inside the
+ <property>commandButton</property>,
+ </emphasis> drag the cursor over to the editor, and drop it inside the
editor after the inputText component.</para>
</listitem>
<listitem>
@@ -878,15 +878,10 @@
</emphasis></para>
</listitem>
<listitem>
- <para>In Source mode add <emphasis role="bold">
- <property><br/></property>
- </emphasis> tags between <emphasis role="bold">
- <property><outputText></property>
- </emphasis>, <emphasis role="bold">
- <property><inputText></property>
- </emphasis> and <emphasis role="bold">
- <property><commandButton></property>
- </emphasis> components to place them on different lines</para>
+ <para>In Source mode add <emphasis role="bold"><property><br/></property></emphasis>
+ tags between <emphasis role="bold"><property><outputText></property></emphasis>,
+ <emphasis role="bold"><property><inputText></property></emphasis>
+ and <emphasis role="bold"><property><commandButton></property></emphasis> components to place them on different lines</para>
</listitem>
</itemizedlist>
<para>inputnumber.jsp page should look like this:</para>
16 years, 4 months
JBoss Tools SVN: r6160 - in trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp: contentassist and 4 other directories.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:50:07 -0500 (Thu, 07 Feb 2008)
New Revision: 6160
Added:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/SourceEditorPageContext.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/util/
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/util/XmlUtil.java
Removed:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditorPageContext.java
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatHtmlContentAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatJSPContentAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualContext.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/ValueHelper.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatHtmlContentAssistProcessor.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatHtmlContentAssistProcessor.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatHtmlContentAssistProcessor.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -89,12 +89,16 @@
public static final String faceletHtmlPrefix = "0fHP";
public static final String JSFCAttributeName = "jsfc";
public static final String faceletHtmlPrefixStart = faceletHtmlPrefix + ":";
+ //Added by Max Areshkau JBIDE-788
public static final KbTldResource faceletHtmlResource = new KbTldResource(faceletHtmlUri, "", faceletHtmlPrefix, null);
public ICompletionProposal[] computeCompletionProposals(ITextViewer textViewer, int documentPosition) {
document = textViewer.getDocument();
editorInput = JspEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput();
- registerToTldManager(textViewer);
+ //added by Max Areshkau JBIDE-788
+ IndexedRegion treeNode = ContentAssistUtils.getNodeAt(textViewer, documentPosition);
+ IDOMNode node = (IDOMNode) treeNode;
+ registerToTldManager(textViewer, node);
ICompletionProposal[] proposals = super.computeCompletionProposals(textViewer, documentPosition);
if(proposals!=null) {
@@ -476,13 +480,17 @@
return wtpKbConnector;
}
- private void registerToTldManager(ITextViewer viewer) {
+ private void registerToTldManager(ITextViewer viewer,IDOMNode node) {
if((tldManager==null) && (viewer instanceof VpeTaglibManagerProvider)) {
tldManager = ((VpeTaglibManagerProvider)viewer).getTaglibManager();
+ tldManager.setReferenceNode(node);
if(tldManager!=null) {
tldManager.addTaglibListener(this);
updateActiveContentAssistProcessor(document);
}
+ } else if(tldManager!=null) {
+ tldManager.setReferenceNode(node);
+ updateActiveContentAssistProcessor(document);
}
}
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatJSPContentAssistProcessor.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatJSPContentAssistProcessor.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/RedHatJSPContentAssistProcessor.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -82,15 +82,14 @@
/**
* @author Igels
*/
-public class RedHatJSPContentAssistProcessor extends JSPContentAssistProcessor implements VpeTaglibListener {
+public class RedHatJSPContentAssistProcessor extends JSPContentAssistProcessor{
private JSPActiveContentAssistProcessor jspActiveCAP;
private WtpKbConnector wtpKbConnector;
private IDocument document;
private boolean dontOpenTag = false;
- private List registeredTagsForActiveCAP = new ArrayList();
- private VpeTaglibManager tldManager;
+
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentPosition) {
try {
String text = viewer.getDocument().get(0, documentPosition);
@@ -102,7 +101,7 @@
}
document = viewer.getDocument();
- registerToTldManager(viewer);
+
ICompletionProposal[] proposals = super.computeCompletionProposals(viewer, documentPosition);
// If proposal list from super is empty to try to get it from Red Hat dinamic jsp content assist processor.
try {
@@ -182,76 +181,7 @@
return autoActivChars;
}
- private void registerToTldManager(ITextViewer viewer) {
- if((tldManager==null) && (viewer instanceof VpeTaglibManagerProvider)) {
- tldManager = ((VpeTaglibManagerProvider)viewer).getTaglibManager();
- if(tldManager!=null) {
- tldManager.addTaglibListener(this);
- updateActiveContentAssistProcessor(document);
- }
- }
- }
- public void taglibPrefixChanged(String[] prefixs) {
- updateActiveContentAssistProcessor(document);
- }
-
- public void addTaglib(String uri, String prefix) {
- }
-
- public void removeTaglib(String uri, String prefix) {
- }
-
- public void updateActiveContentAssistProcessor(IDocument document) {
- unregisterTagsFromActiveCAP();
- if(tldManager == null) {
- TLDCMDocumentManager manager = TaglibController.getTLDCMDocumentManager(document);
- if (manager != null) {
- List list = manager.getTaglibTrackers();
- for(int i=0; i<list.size(); i++) {
- TaglibTracker tracker = (TaglibTracker)list.get(i);
-
- String version = TLDVersionHelper.getTldVersion(tracker);
- KbTldResource resource = new KbTldResource(tracker.getURI(), "", tracker.getPrefix(), version);
- getWtpKbConnector().registerResource(resource);
- addActiveContentAssistProcessorToProcessorMap(tracker.getURI(), tracker.getPrefix(), version);
- }
- }
- } else {
- List list = tldManager.getTagLibs();
- for(int i=0; i<list.size(); i++) {
- TaglibData data = (TaglibData)list.get(i);
- String version = WebProject.getTldVersion(data.getUri(), data.getPrefix(), document, null);
- KbTldResource resource = new KbTldResource(data.getUri(), "", data.getPrefix(), version);
- getWtpKbConnector().registerResource(resource);
- addActiveContentAssistProcessorToProcessorMap(data.getUri(), data.getPrefix(), version);
- }
- }
- }
-
- private void unregisterTagsFromActiveCAP() {
- if(document!=null) {
- for(int i=0; i<registeredTagsForActiveCAP.size(); i++) {
- String fullName = (String)registeredTagsForActiveCAP.get(i);
- fNameToProcessorMap.remove(fullName);
- }
- registeredTagsForActiveCAP.clear();
- }
- }
-
- private void addActiveContentAssistProcessorToProcessorMap(String uri, String prefix, String version) {
- try {
- List names = getWtpKbConnector().getAllTagNamesFromTldByUri(uri, version);
- for(Iterator iter = names.iterator(); iter.hasNext();) {
- String fullName = prefix + ":" + iter.next();
- fNameToProcessorMap.put(fullName, jspActiveCAP);
- registeredTagsForActiveCAP.add(fullName);
- }
- } catch (KbException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
-
private WtpKbConnector getWtpKbConnector() {
if(wtpKbConnector == null && document != null) {
try {
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualContext.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualContext.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualContext.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -13,7 +13,7 @@
import org.jboss.tools.common.kb.wtp.WtpKbConnector;
import org.jboss.tools.jst.web.tld.VpeTaglibManager;
-public interface IVisualContext extends VpeTaglibManager {
+public interface IVisualContext {
public void refreshBundleValues();
public WtpKbConnector getConnector();
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -1,379 +1,377 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.jst.jsp.jspeditor;
-
-import java.util.Properties;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.QualifiedName;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IEditorActionBarContributor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.INavigationLocation;
-import org.eclipse.ui.INavigationLocationProvider;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.IReusableEditor;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.ide.IGotoMarker;
-import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
-import org.eclipse.ui.texteditor.AbstractTextEditor;
-import org.eclipse.ui.texteditor.IDocumentProvider;
-import org.eclipse.ui.texteditor.IStatusField;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.texteditor.ITextEditorExtension;
-import org.eclipse.ui.texteditor.ITextEditorExtension2;
-import org.eclipse.ui.texteditor.ITextEditorExtension3;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.wst.sse.ui.StructuredTextEditor;
-import org.eclipse.wst.sse.ui.internal.contentoutline.ConfigurableContentOutlinePage;
-import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
-import org.jboss.tools.common.model.XModelObject;
-import org.jboss.tools.common.model.event.XModelTreeEvent;
-import org.jboss.tools.common.model.event.XModelTreeListener;
-import org.jboss.tools.common.model.filesystems.impl.DiscardFileHandler;
-import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
-import org.jboss.tools.common.model.plugin.ModelPlugin;
-import org.jboss.tools.common.model.ui.ModelUIPlugin;
-import org.jboss.tools.common.model.ui.editor.EditorDescriptor;
-import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
-import org.jboss.tools.common.model.util.EclipseResourceUtil;
-import org.jboss.tools.common.model.util.XModelTreeListenerSWTSync;
-import org.jboss.tools.common.text.ext.IMultiPageEditor;
-import org.jboss.tools.jst.jsp.JspEditorPlugin;
-import org.jboss.tools.jst.jsp.editor.IVisualContext;
-import org.jboss.tools.jst.jsp.editor.IVisualController;
-import org.jboss.tools.jst.jsp.editor.IVisualEditor;
-import org.jboss.tools.jst.jsp.editor.IVisualEditorFactory;
-import org.jboss.tools.jst.jsp.preferences.VpePreference;
-import org.jboss.tools.jst.web.tld.VpeTaglibManager;
-import org.jboss.tools.jst.web.tld.VpeTaglibManagerProvider;
-import org.osgi.framework.Bundle;
-
-// Fix for EXIN-232: The IMultiPageEditor interface implementation is added.
-public class JSPMultiPageEditor extends JSPMultiPageEditorPart implements
- XModelTreeListener, ITextEditor, IGotoMarker, VpeTaglibManagerProvider,
- IReusableEditor, ITextEditorExtension, ITextEditorExtension2,
- ITextEditorExtension3, INavigationLocationProvider, IMultiPageEditor {
-
- private static final String VISUALSOURCE_TAB_LABEL = "JSPMultiPageEditor.TabLabel.VisualSource";
-
- private static final String VISUAL_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Visual";
-
- private static final String SOURCE_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Source";
-
- /** PREVIEW_TAB_LABEL */
- private static final String PREVIEW_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Preview";
-
- private IVisualEditor visualEditor;
-
- private int visualSourceIndex;
-
- private int visualIndex;
-
- JSPTextEditor sourceEditor;
-
- private int sourceIndex;
-
- /** composite control for default web-browser */
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.jst.jsp.jspeditor;
+
+import java.util.Properties;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorActionBarContributor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.INavigationLocation;
+import org.eclipse.ui.INavigationLocationProvider;
+import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.IReusableEditor;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.IStatusField;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorExtension;
+import org.eclipse.ui.texteditor.ITextEditorExtension2;
+import org.eclipse.ui.texteditor.ITextEditorExtension3;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.eclipse.wst.sse.ui.internal.contentoutline.ConfigurableContentOutlinePage;
+import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.event.XModelTreeEvent;
+import org.jboss.tools.common.model.event.XModelTreeListener;
+import org.jboss.tools.common.model.filesystems.impl.DiscardFileHandler;
+import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
+import org.jboss.tools.common.model.plugin.ModelPlugin;
+import org.jboss.tools.common.model.ui.ModelUIPlugin;
+import org.jboss.tools.common.model.ui.editor.EditorDescriptor;
+import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.model.util.XModelTreeListenerSWTSync;
+import org.jboss.tools.common.text.ext.IMultiPageEditor;
+import org.jboss.tools.jst.jsp.JspEditorPlugin;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.jst.jsp.editor.IVisualController;
+import org.jboss.tools.jst.jsp.editor.IVisualEditor;
+import org.jboss.tools.jst.jsp.editor.IVisualEditorFactory;
+import org.jboss.tools.jst.jsp.preferences.VpePreference;
+import org.jboss.tools.jst.web.tld.VpeTaglibManager;
+import org.jboss.tools.jst.web.tld.VpeTaglibManagerProvider;
+import org.osgi.framework.Bundle;
+
+// Fix for EXIN-232: The IMultiPageEditor interface implementation is added.
+public class JSPMultiPageEditor extends JSPMultiPageEditorPart implements
+ XModelTreeListener, ITextEditor, IGotoMarker, VpeTaglibManagerProvider,
+ IReusableEditor, ITextEditorExtension, ITextEditorExtension2,
+ ITextEditorExtension3, INavigationLocationProvider, IMultiPageEditor {
+
+ private static final String VISUALSOURCE_TAB_LABEL = "JSPMultiPageEditor.TabLabel.VisualSource";
+
+ private static final String VISUAL_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Visual";
+
+ private static final String SOURCE_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Source";
+
+ /** PREVIEW_TAB_LABEL */
+ private static final String PREVIEW_TAB_LABEL = "JSPMultiPageEditor.TabLabel.Preview";
+
+ private IVisualEditor visualEditor;
+
+ private int visualSourceIndex;
+
+ private int visualIndex;
+
+ JSPTextEditor sourceEditor;
+
+ private int sourceIndex;
+
+ /** composite control for default web-browser */
//private IVisualEditor previewWebBrowser;
-
- /** index of tab contain default web-browser */
- private int previewIndex;
-
- private boolean osWindows = true;
-
- protected XModelTreeListenerSWTSync syncListener = new XModelTreeListenerSWTSync(
- this);
-
- private int oldPage = -1;
-
- private ConfigurableContentOutlinePage outlinePage = null;
-
- XModelObject object;
-
- private QualifiedName persistentTabQualifiedName = new QualifiedName("",
- "Selected_tab");
-
- int selectedPageIndex = 0;
-
- static IVisualEditorFactory visualEditorFactory;
-
- static {
- try {
- Bundle b = Platform.getBundle("org.jboss.tools.vpe");
- Class cls = b
- .loadClass("org.jboss.tools.vpe.editor.VpeEditorPartFactory");
- visualEditorFactory = (IVisualEditorFactory) cls.newInstance();
- } catch (Exception e) {
- JspEditorPlugin.getPluginLog().logError("Error in loading visual editor factory", e);
- }
- }
-
- private void loadSelectedTab() {
- IFile file = getFile();
- try {
- String q = (file == null) ? null : file.getPersistentProperty(persistentTabQualifiedName);
- if (q == null) {
- if ("Source".equalsIgnoreCase(VpePreference.EDITOR_VIEW_OPTION
- .getValue()))
- selectedPageIndex = 2;
- else if ("Visual"
- .equalsIgnoreCase(VpePreference.EDITOR_VIEW_OPTION
- .getValue()))
- selectedPageIndex = 1;
- else
- selectedPageIndex = 0;
- } else {
- int qi = Integer.parseInt(q);
-
- if (qi >= 0 && qi < getTabFolder().getItemCount())
- selectedPageIndex = qi;
- }
-
- } catch (Exception e) {
- selectedPageIndex = 0;
- }
- }
-
- protected int getSourcePageIndex() {
- return sourceIndex;
- }
-
- private void saveSelectedTab() {
- IFile file = getFile();
- if(file == null) return;
- String q = "" + selectedPageIndex;
- try {
- file.setPersistentProperty(persistentTabQualifiedName, q);
- } catch (CoreException e) {
- JspEditorPlugin.getPluginLog().logWarning(e);
- }
- }
-
- public void superPageChange(int newPageIndex) {
- Control control = getControl(visualSourceIndex);
- if (control != null) {
- control.setVisible(true);
- }
- setFocus();
- IEditorPart activeEditor = getEditor(visualSourceIndex);
- IEditorActionBarContributor contributor = getEditorSite()
- .getActionBarContributor();
- if (contributor != null
- && contributor instanceof MultiPageEditorActionBarContributor) {
- ((MultiPageEditorActionBarContributor) contributor)
- .setActivePage(activeEditor);
- }
- if (activeEditor != null) {
- ISelectionProvider selectionProvider = activeEditor.getSite()
- .getSelectionProvider();
- if (selectionProvider != null) {
- SelectionChangedEvent event = new SelectionChangedEvent(
- selectionProvider, selectionProvider.getSelection());
- ((JSPMultiPageSelectionProvider) getSite()
- .getSelectionProvider()).fireSelectionChanged(event);
- }
- }
- }
-
- protected void pageChange(int newPageIndex) {
- selectedPageIndex = newPageIndex;
- if (osWindows) {
+
+ /** index of tab contain default web-browser */
+ private int previewIndex;
+
+ private boolean osWindows = true;
+
+ protected XModelTreeListenerSWTSync syncListener = new XModelTreeListenerSWTSync(
+ this);
+
+ private int oldPage = -1;
+
+ private ConfigurableContentOutlinePage outlinePage = null;
+
+ XModelObject object;
+
+ private QualifiedName persistentTabQualifiedName = new QualifiedName("",
+ "Selected_tab");
+
+ int selectedPageIndex = 0;
+
+ static IVisualEditorFactory visualEditorFactory;
+
+ static {
+ try {
+ Bundle b = Platform.getBundle("org.jboss.tools.vpe");
+ Class cls = b
+ .loadClass("org.jboss.tools.vpe.editor.VpeEditorPartFactory");
+ visualEditorFactory = (IVisualEditorFactory) cls.newInstance();
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError("Error in loading visual editor factory", e);
+ }
+ }
+
+ private void loadSelectedTab() {
+ IFile file = getFile();
+ try {
+ String q = (file == null) ? null : file.getPersistentProperty(persistentTabQualifiedName);
+ if (q == null) {
+ if ("Source".equalsIgnoreCase(VpePreference.EDITOR_VIEW_OPTION
+ .getValue()))
+ selectedPageIndex = 2;
+ else if ("Visual"
+ .equalsIgnoreCase(VpePreference.EDITOR_VIEW_OPTION
+ .getValue()))
+ selectedPageIndex = 1;
+ else
+ selectedPageIndex = 0;
+ } else {
+ int qi = Integer.parseInt(q);
+
+ if (qi >= 0 && qi < getTabFolder().getItemCount())
+ selectedPageIndex = qi;
+ }
+
+ } catch (Exception e) {
+ selectedPageIndex = 0;
+ }
+ }
+
+ protected int getSourcePageIndex() {
+ return sourceIndex;
+ }
+
+ private void saveSelectedTab() {
+ IFile file = getFile();
+ if(file == null) return;
+ String q = "" + selectedPageIndex;
+ try {
+ file.setPersistentProperty(persistentTabQualifiedName, q);
+ } catch (CoreException e) {
+ JspEditorPlugin.getPluginLog().logWarning(e);
+ }
+ }
+
+ public void superPageChange(int newPageIndex) {
+ Control control = getControl(visualSourceIndex);
+ if (control != null) {
+ control.setVisible(true);
+ }
+ setFocus();
+ IEditorPart activeEditor = getEditor(visualSourceIndex);
+ IEditorActionBarContributor contributor = getEditorSite()
+ .getActionBarContributor();
+ if (contributor != null
+ && contributor instanceof MultiPageEditorActionBarContributor) {
+ ((MultiPageEditorActionBarContributor) contributor)
+ .setActivePage(activeEditor);
+ }
+ if (activeEditor != null) {
+ ISelectionProvider selectionProvider = activeEditor.getSite()
+ .getSelectionProvider();
+ if (selectionProvider != null) {
+ SelectionChangedEvent event = new SelectionChangedEvent(
+ selectionProvider, selectionProvider.getSelection());
+ ((JSPMultiPageSelectionProvider) getSite()
+ .getSelectionProvider()).fireSelectionChanged(event);
+ }
+ }
+ }
+
+ protected void pageChange(int newPageIndex) {
+ selectedPageIndex = newPageIndex;
+ if (osWindows) {
if (newPageIndex == visualSourceIndex) {
if (visualEditor.getVisualEditor() == null) {
visualEditor.createVisualEditor();
}
- visualEditor.setVisualMode(IVisualEditor.VISUALSOURCE_MODE);
+ visualEditor.setVisualMode(IVisualEditor.VISUALSOURCE_MODE);
}
else if (newPageIndex == visualIndex) {
if (visualEditor.getVisualEditor() == null) {
visualEditor.createVisualEditor();
}
- visualEditor.setVisualMode(IVisualEditor.VISUAL_MODE);
+ visualEditor.setVisualMode(IVisualEditor.VISUAL_MODE);
}
- else if (newPageIndex == sourceIndex)
- visualEditor.setVisualMode(IVisualEditor.SOURCE_MODE);
- else if (newPageIndex == previewIndex) {
+ else if (newPageIndex == sourceIndex)
+ visualEditor.setVisualMode(IVisualEditor.SOURCE_MODE);
+ else if (newPageIndex == previewIndex) {
if (visualEditor.getPreviewWebBrowser() == null) {
visualEditor.createPreviewBrowser();
}
- visualEditor.setVisualMode(IVisualEditor.PREVIEW_MODE);
- }
-
- superPageChange(newPageIndex);
- } else {
- super.pageChange(newPageIndex);
- }
- oldPage = newPageIndex;
- }
-
- public void setInput(IEditorInput input) {
- super.setInput(XModelObjectEditorInput.checkInput(input));
- if (getEditorInput() instanceof IModelObjectEditorInput) {
- object = ((IModelObjectEditorInput) getEditorInput())
- .getXModelObject();
- }
- if (sourceEditor != null
- && sourceEditor.getEditorInput() != getEditorInput()
- && sourceEditor.getEditorInput() != null) {
- if (sourceEditor instanceof AbstractTextEditor) {
- try {
- ((AbstractTextEditor) sourceEditor)
- .setInput(getEditorInput());
- } catch (Exception exc) {
- JspEditorPlugin.getPluginLog().logError(exc);
- }
- }
- visualEditor.setInput(getEditorInput());
- updateTitle();
- }
- updateFile();
- }
+ visualEditor.setVisualMode(IVisualEditor.PREVIEW_MODE);
+ }
+
+ superPageChange(newPageIndex);
+ } else {
+ super.pageChange(newPageIndex);
+ }
+ oldPage = newPageIndex;
+ }
+
+ public void setInput(IEditorInput input) {
+ super.setInput(XModelObjectEditorInput.checkInput(input));
+ if (getEditorInput() instanceof IModelObjectEditorInput) {
+ object = ((IModelObjectEditorInput) getEditorInput())
+ .getXModelObject();
+ }
+ if (sourceEditor != null
+ && sourceEditor.getEditorInput() != getEditorInput()
+ && sourceEditor.getEditorInput() != null) {
+ if (sourceEditor instanceof AbstractTextEditor) {
+ try {
+ ((AbstractTextEditor) sourceEditor)
+ .setInput(getEditorInput());
+ } catch (Exception exc) {
+ JspEditorPlugin.getPluginLog().logError(exc);
+ }
+ }
+ visualEditor.setInput(getEditorInput());
+ updateTitle();
+ }
+ updateFile();
+ }
+
+ private void updateFile() {
+ IFile file = getFile();
+ if (file == null) return;
+ try {
+ file.refreshLocal(0, null);
+ } catch (CoreException e) {
+ JspEditorPlugin.getPluginLog().logWarning(e);
+ }
+ }
+
+ private IFile getFile() {
+ IEditorInput input = getEditorInput();
+ return (input instanceof IFileEditorInput) ? ((IFileEditorInput) input)
+ .getFile() : null;
+ }
+
+ public String getContentDescription() {
+ return "";
+ }
+
+ /**
+ *
+ */
+ private ISelectionProvider selectionProvider = null;
- private void updateFile() {
- IFile file = getFile();
- if (file == null) return;
- try {
- file.refreshLocal(0, null);
- } catch (CoreException e) {
- JspEditorPlugin.getPluginLog().logWarning(e);
- }
- }
-
- private IFile getFile() {
- IEditorInput input = getEditorInput();
- return (input instanceof IFileEditorInput) ? ((IFileEditorInput) input)
- .getFile() : null;
- }
-
- public String getContentDescription() {
- return "";
- }
-
- /**
- *
- */
- private ISelectionProvider selectionProvider = null;
-
private JSPMultiPageEditorSite site;
-
- protected IEditorSite createSite(IEditorPart editor) {
+
+ protected IEditorSite createSite(IEditorPart editor) {
site = new JSPMultiPageEditorSite(this, editor) {
- private ISelectionChangedListener postSelectionChangedListener = null;
+ private ISelectionChangedListener postSelectionChangedListener = null;
+
+ private ISelectionChangedListener getPostSelectionChangedListener() {
+ if (postSelectionChangedListener == null) {
+ postSelectionChangedListener = new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handlePostSelectionChanged(event);
+ }
+ };
+ }
+ return postSelectionChangedListener;
+ }
+
+ protected void handlePostSelectionChanged(
+ SelectionChangedEvent event) {
+ ISelectionProvider parentProvider = getMultiPageEditor()
+ .getSite().getSelectionProvider();
+ ISelection s = event.getSelection();
+ if (s == null || s.isEmpty())
+ return;
+ if (s instanceof ITextSelection) {
+ if (parentProvider instanceof JSPMultiPageSelectionProvider) {
+ ((JSPMultiPageSelectionProvider) parentProvider)
+ .firePostSelectionChanged(event);
+ }
+ }
+ }
+
+ public String getId() {
+ return getSite().getId(); //$NON-NLS-1$
+ }
+
+ /**
+ *
+ */
+ public ISelectionProvider getSelectionProvider() {
+ return selectionProvider;
+ }
+
+ /**
+ *
+ */
+ public void setSelectionProvider(ISelectionProvider provider) {
+ ISelectionProvider oldSelectionProvider = getSelectionProvider();
+ if (oldSelectionProvider != null) {
+ if (oldSelectionProvider instanceof IPostSelectionProvider) {
+ ((IPostSelectionProvider) oldSelectionProvider)
+ .removePostSelectionChangedListener(getPostSelectionChangedListener());
+ }
+ }
+
+ selectionProvider = provider;
+ if (oldSelectionProvider != null) {
+ oldSelectionProvider
+ .removeSelectionChangedListener(getSelectionChangedListener());
+ }
+ if (selectionProvider != null) {
+ selectionProvider
+ .addSelectionChangedListener(getSelectionChangedListener());
+ }
+
+ if (provider != null) {
+ if (provider instanceof IPostSelectionProvider) {
+ ((IPostSelectionProvider) provider)
+ .addPostSelectionChangedListener(getPostSelectionChangedListener());
+ }
+ }
+ }
+
+ public Object getService(Class api) {
+ // TODO megration to eclipse 3.2
+ return null;
+ }
+
+ public boolean hasService(Class api) {
+ // TODO megration to eclipse 3.2
+ return false;
+ }
- private ISelectionChangedListener getPostSelectionChangedListener() {
- if (postSelectionChangedListener == null) {
- postSelectionChangedListener = new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- handlePostSelectionChanged(event);
- }
- };
- }
- return postSelectionChangedListener;
- }
-
- protected void handlePostSelectionChanged(
- SelectionChangedEvent event) {
- ISelectionProvider parentProvider = getMultiPageEditor()
- .getSite().getSelectionProvider();
- ISelection s = event.getSelection();
- if (s == null || s.isEmpty())
- return;
- if (s instanceof ITextSelection) {
- if (parentProvider instanceof JSPMultiPageSelectionProvider) {
- ((JSPMultiPageSelectionProvider) parentProvider)
- .firePostSelectionChanged(event);
- }
- }
- }
-
- public String getId() {
- return getSite().getId(); //$NON-NLS-1$
- }
-
- /**
- *
- */
- public ISelectionProvider getSelectionProvider() {
- return selectionProvider;
- }
-
- /**
- *
- */
- public void setSelectionProvider(ISelectionProvider provider) {
- ISelectionProvider oldSelectionProvider = getSelectionProvider();
- if (oldSelectionProvider != null) {
- if (oldSelectionProvider instanceof IPostSelectionProvider) {
- ((IPostSelectionProvider) oldSelectionProvider)
- .removePostSelectionChangedListener(getPostSelectionChangedListener());
- }
- }
-
- selectionProvider = provider;
- if (oldSelectionProvider != null) {
- oldSelectionProvider
- .removeSelectionChangedListener(getSelectionChangedListener());
- }
- if (selectionProvider != null) {
- selectionProvider
- .addSelectionChangedListener(getSelectionChangedListener());
- }
-
- if (provider != null) {
- if (provider instanceof IPostSelectionProvider) {
- ((IPostSelectionProvider) provider)
- .addPostSelectionChangedListener(getPostSelectionChangedListener());
- }
- }
-
-
- }
-
- public Object getService(Class api) {
- // TODO megration to eclipse 3.2
- return null;
- }
-
- public boolean hasService(Class api) {
- // TODO megration to eclipse 3.2
- return false;
- }
-
public void dispose() {
ISelectionProvider provider = getSelectionProvider();
if (provider instanceof IPostSelectionProvider && postSelectionChangedListener != null) {
@@ -384,482 +382,483 @@
postSelectionChangedListener = null;
super.dispose();
}
- };
- return site;
- }
-
- protected void createPages() {
-
- // Sergey Vasilyev
- /*
- * TODO to author of this class VPE work on linux! this check not need
- * in future
- */
- // String os_name = System.getProperty("os.name");
- if (true) {// (os_name.startsWith("Windows")){
- osWindows = true;
- createPagesForWindows();
- } else {
- osWindows = false;
- }
- if (selectedPageIndex == sourceIndex) {
- visualEditor.setVisualMode(IVisualEditor.SOURCE_MODE);
- // switchOutlineToJSPEditor();
- }
- loadSelectedTab();
- setActivePage(selectedPageIndex);
- pageChange(selectedPageIndex);
-
- new ResourceChangeListener(this, getContainer());
- if (getModelObject() != null) {
- getModelObject().getModel().addModelTreeListener(syncListener);
- }
- }
-
- private void createPagesForWindows() {
- sourceEditor = new JSPTextEditor(this);
- visualEditor = visualEditorFactory.createVisualEditor(this,
- sourceEditor, false);
-
- try {
- visualSourceIndex = addPage(visualEditor, getEditorInput());
- setPageText(visualSourceIndex, JSPEditorMessages
- .getString(VISUALSOURCE_TAB_LABEL));
- setPartName(visualEditor.getTitle());
- } catch (PartInitException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- try {
- visualIndex = addPage(visualEditor, getEditorInput());
- setPageText(visualIndex, JSPEditorMessages
- .getString(VISUAL_TAB_LABEL));
- setPartName(visualEditor.getTitle());
- } catch (PartInitException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
-
- try {
- sourceIndex = addPage(visualEditor, getEditorInput());
- setPageText(sourceIndex, JSPEditorMessages
- .getString(SOURCE_TAB_LABEL));
- setPartName(visualEditor.getTitle());
- } catch (PartInitException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
-
- // Add tab contain default web-browser
- try {
- previewIndex = addPage(visualEditor, getEditorInput());
- setPageText(previewIndex, JSPEditorMessages
- .getString(PREVIEW_TAB_LABEL));
- setPartName(visualEditor.getTitle());
- } catch (PartInitException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
-
- }
-
- public void doSave(IProgressMonitor monitor) {
- sourceEditor.doSave(monitor);
- }
-
- class PCL implements IPropertyListener {
- public void propertyChanged(Object source, int i) {
- firePropertyChange(i);
- if (i == IEditorPart.PROP_INPUT
- && getEditorInput() != sourceEditor.getEditorInput()) {
- setInput(sourceEditor.getEditorInput());
- setPartName(sourceEditor.getPartName());
- setTitleToolTip(sourceEditor.getTitleToolTip());
- }
- }
- }
-
- public void doSaveAs() {
- XModelObject old = getModelObject();
- PCL pcl = new PCL();
- sourceEditor.addPropertyListener(pcl);
- sourceEditor.doSaveAs();
- sourceEditor.removePropertyListener(pcl);
- try {
- if (old.isModified())
- new DiscardFileHandler().executeHandler(old, new Properties());
- } catch (Exception e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
-
- public void gotoMarker(final IMarker marker) {
- setActivePage(sourceIndex);
- pageChange(sourceIndex);
- IGotoMarker adapter = (IGotoMarker) sourceEditor
- .getAdapter(IGotoMarker.class);
- if (adapter != null) {
- adapter.gotoMarker(marker);
- }
- }
-
- public boolean isSaveAsAllowed() {
- return sourceEditor.isSaveAsAllowed();
- }
-
- public JSPTextEditor getJspEditor() {
- return sourceEditor;
- }
-
- public StructuredTextEditor getSourceEditor() {
- return sourceEditor;
- }
-
- public IVisualEditor getVisualEditor() {
- return visualEditor;
- }
-
- public IEditorPart getActivePageEditor() {
- return getActiveEditor();
- }
-
- protected XModelObject getModelObject() {
- return object;
- }
-
- public void dispose() {
- saveSelectedTab();
- XModelObject o = getModelObject();
- visualEditor.dispose();
+ };
+ return site;
+ }
+
+ protected void createPages() {
+
+ // Sergey Vasilyev
+ /*
+ * TODO to author of this class VPE work on linux! this check not need
+ * in future
+ */
+ // String os_name = System.getProperty("os.name");
+ if (true) {// (os_name.startsWith("Windows")){
+ osWindows = true;
+ createPagesForWindows();
+ } else {
+ osWindows = false;
+ }
+ if (selectedPageIndex == sourceIndex) {
+ visualEditor.setVisualMode(IVisualEditor.SOURCE_MODE);
+ // switchOutlineToJSPEditor();
+ }
+ loadSelectedTab();
+ setActivePage(selectedPageIndex);
+ pageChange(selectedPageIndex);
+
+ new ResourceChangeListener(this, getContainer());
+ if (getModelObject() != null) {
+ getModelObject().getModel().addModelTreeListener(syncListener);
+ }
+ }
+
+ private void createPagesForWindows() {
+ sourceEditor = new JSPTextEditor(this);
+ visualEditor = visualEditorFactory.createVisualEditor(this,
+ sourceEditor, false);
+
+ try {
+ visualSourceIndex = addPage(visualEditor, getEditorInput());
+ setPageText(visualSourceIndex, JSPEditorMessages
+ .getString(VISUALSOURCE_TAB_LABEL));
+ setPartName(visualEditor.getTitle());
+ } catch (PartInitException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ try {
+ visualIndex = addPage(visualEditor, getEditorInput());
+ setPageText(visualIndex, JSPEditorMessages
+ .getString(VISUAL_TAB_LABEL));
+ setPartName(visualEditor.getTitle());
+ } catch (PartInitException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+
+ try {
+ sourceIndex = addPage(visualEditor, getEditorInput());
+ setPageText(sourceIndex, JSPEditorMessages
+ .getString(SOURCE_TAB_LABEL));
+ setPartName(visualEditor.getTitle());
+ } catch (PartInitException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+
+ // Add tab contain default web-browser
+ try {
+ previewIndex = addPage(visualEditor, getEditorInput());
+ setPageText(previewIndex, JSPEditorMessages
+ .getString(PREVIEW_TAB_LABEL));
+ setPartName(visualEditor.getTitle());
+ } catch (PartInitException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+
+ }
+
+ public void doSave(IProgressMonitor monitor) {
+ sourceEditor.doSave(monitor);
+ }
+
+ class PCL implements IPropertyListener {
+ public void propertyChanged(Object source, int i) {
+ firePropertyChange(i);
+ if (i == IEditorPart.PROP_INPUT
+ && getEditorInput() != sourceEditor.getEditorInput()) {
+ setInput(sourceEditor.getEditorInput());
+ setPartName(sourceEditor.getPartName());
+ setTitleToolTip(sourceEditor.getTitleToolTip());
+ }
+ }
+ }
+
+ public void doSaveAs() {
+ XModelObject old = getModelObject();
+ PCL pcl = new PCL();
+ sourceEditor.addPropertyListener(pcl);
+ sourceEditor.doSaveAs();
+ sourceEditor.removePropertyListener(pcl);
+ try {
+ if (old.isModified())
+ new DiscardFileHandler().executeHandler(old, new Properties());
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public void gotoMarker(final IMarker marker) {
+ setActivePage(sourceIndex);
+ pageChange(sourceIndex);
+ IGotoMarker adapter = (IGotoMarker) sourceEditor
+ .getAdapter(IGotoMarker.class);
+ if (adapter != null) {
+ adapter.gotoMarker(marker);
+ }
+ }
+
+ public boolean isSaveAsAllowed() {
+ return sourceEditor.isSaveAsAllowed();
+ }
+
+ public JSPTextEditor getJspEditor() {
+ return sourceEditor;
+ }
+
+ public StructuredTextEditor getSourceEditor() {
+ return sourceEditor;
+ }
+
+ public IVisualEditor getVisualEditor() {
+ return visualEditor;
+ }
+
+ public IEditorPart getActivePageEditor() {
+ return getActiveEditor();
+ }
+
+ protected XModelObject getModelObject() {
+ return object;
+ }
+
+ public void dispose() {
+ saveSelectedTab();
+ XModelObject o = getModelObject();
+ visualEditor.dispose();
site.dispose();
- super.dispose();
- if (o != null) {
- o.getModel().removeModelTreeListener(syncListener);
- }
+ super.dispose();
+ if (o != null) {
+ o.getModel().removeModelTreeListener(syncListener);
+ }
if (syncListener != null)
syncListener.dispose();
syncListener=null;
- if (o != null && o.isModified() && o.isActive()) {
- try {
- ((FolderImpl) o.getParent()).discardChildFile(o);
- } catch (Exception e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
- }
-
- public Object getAdapter(Class adapter) {
- if (IContentOutlinePage.class.equals(adapter)) {
- if (osWindows) {
- if (visualEditor != null) {
- if (outlinePage == null)
- outlinePage = (ConfigurableContentOutlinePage) visualEditor
- .getAdapter(adapter);
- return outlinePage;
- }
- } else {
- if (sourceEditor != null) {
- return sourceEditor.getAdapter(adapter);
- }
- }
- } else if (IPropertySheetPage.class.equals(adapter)) {
- if (sourceEditor != null)
- return sourceEditor.getAdapter(adapter);
- } else if (adapter == EditorDescriptor.class)
- return new EditorDescriptor(new String[] { "jsp", "html" });
-
- if (sourceEditor != null) {
- return sourceEditor.getAdapter(adapter);
- }
-
- return super.getAdapter(adapter);
- }
-
- public void nodeChanged(XModelTreeEvent event) {
- if (event.getModelObject() == getModelObject()) {
- setContentDescription(getEditorInput().getName());
- if (sourceEditor != null)
- sourceEditor.updateModification();
- }
- }
-
- public void structureChanged(XModelTreeEvent event) {
- }
-
- public void close(boolean save) {
- sourceEditor.close(save);
- }
-
- public void doRevertToSaved() {
- sourceEditor.doRevertToSaved();
- }
-
- public IAction getAction(String actionId) {
- return sourceEditor.getAction(actionId);
- }
-
- public IDocumentProvider getDocumentProvider() {
- return sourceEditor.getDocumentProvider();
- }
-
- public IRegion getHighlightRange() {
- return sourceEditor.getHighlightRange();
- }
-
- public ISelectionProvider getSelectionProvider() {
- return sourceEditor.getSelectionProvider();
- }
-
- public boolean isEditable() {
- return sourceEditor.isEditable();
- }
-
- public void removeActionActivationCode(String actionId) {
- sourceEditor.removeActionActivationCode(actionId);
- }
-
- public void resetHighlightRange() {
- sourceEditor.resetHighlightRange();
- }
-
- public void selectAndReveal(int offset, int length) {
- sourceEditor.selectAndReveal(offset, length);
- }
-
- public void setAction(String actionID, IAction action) {
- sourceEditor.setAction(actionID, action);
- }
-
- public void setActionActivationCode(String actionId,
- char activationCharacter, int activationKeyCode,
- int activationStateMask) {
- sourceEditor.setActionActivationCode(actionId, activationCharacter,
- activationKeyCode, activationStateMask);
- }
-
- public void setHighlightRange(int offset, int length, boolean moveCursor) {
- sourceEditor.setHighlightRange(offset, length, moveCursor);
- }
-
- public void showHighlightRangeOnly(boolean showHighlightRangeOnly) {
- sourceEditor.showHighlightRangeOnly(showHighlightRangeOnly);
- }
-
- public boolean showsHighlightRangeOnly() {
- return sourceEditor.showsHighlightRangeOnly();
- }
-
- public VpeTaglibManager getTaglibManager() {
- if (visualEditor != null) {
- IVisualController controller = visualEditor.getController();
- if (controller != null) {
- IVisualContext context = controller.getPageContext();
- if (context != null) {
- return context;
- }
- }
- }
- return null;
- }
-
- void updateTitle() {
- setPartName(getEditorInput().getName());
- }
-
- public void runDropCommand(String flavor, String data) {
- if (sourceEditor != null)
- sourceEditor.runDropCommand(flavor, data);
- }
-
- public void setStatusField(IStatusField field, String category) {
- if (sourceEditor != null)
- sourceEditor.setStatusField(field, category);
- }
-
- public boolean isEditorInputReadOnly() {
- if (sourceEditor != null) {
- return sourceEditor.isEditorInputReadOnly();
- }
- return false;
- }
-
- public void addRulerContextMenuListener(IMenuListener listener) {
- if (sourceEditor != null)
- sourceEditor.addRulerContextMenuListener(listener);
- }
-
- public void removeRulerContextMenuListener(IMenuListener listener) {
- if (sourceEditor != null)
- sourceEditor.removeRulerContextMenuListener(listener);
- }
-
- public boolean isEditorInputModifiable() {
- if (sourceEditor != null) {
- return sourceEditor.isEditorInputModifiable();
- }
- return false;
- }
-
- public boolean validateEditorInputState() {
- if (sourceEditor != null) {
- return sourceEditor.validateEditorInputState();
- }
- return false;
- }
-
- public InsertMode getInsertMode() {
- if (sourceEditor != null) {
- return sourceEditor.getInsertMode();
- }
- return null;
- }
-
- public void setInsertMode(InsertMode mode) {
- if (sourceEditor != null)
- sourceEditor.setInsertMode(mode);
- }
-
- public void showChangeInformation(boolean show) {
- if (sourceEditor != null)
- sourceEditor.showChangeInformation(show);
- }
-
- public boolean isChangeInformationShowing() {
- if (sourceEditor != null) {
- return sourceEditor.isChangeInformationShowing();
- }
- return false;
- }
-
- public INavigationLocation createEmptyNavigationLocation() {
- if (sourceEditor != null) {
- return sourceEditor.createEmptyNavigationLocation();
- }
- return null;
- }
-
- public INavigationLocation createNavigationLocation() {
- if (sourceEditor != null) {
- return sourceEditor.createNavigationLocation();
- }
- return null;
- }
-}
-
-class ResourceChangeListener implements IResourceChangeListener {
- IEditorPart editorPart;
-
- Composite container;
-
- ResourceChangeListener(IEditorPart editorPart, Composite container) {
- this.editorPart = editorPart;
- this.container = container;
- IWorkspace workspace = ModelUIPlugin.getWorkspace();
- if (workspace == null)
- return;
- workspace.addResourceChangeListener(this);
- container.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- IWorkspace workspace = ModelUIPlugin.getWorkspace();
- if (workspace == null)
- return;
- workspace
- .removeResourceChangeListener(ResourceChangeListener.this);
- }
- });
- }
-
- public void resourceChanged(IResourceChangeEvent event) {
- IEditorInput ei = editorPart.getEditorInput();
- if (!(ei instanceof IFileEditorInput))
- return;
- IFileEditorInput fi = (IFileEditorInput) ei;
- IFile f = fi.getFile();
- if (f == null)
- return;
- IPath path = getPathChange(event, f);
- if (path == null) {
- if (f != null && !f.exists())
- closeEditor();
- return;
- }
- f = ModelPlugin.getWorkspace().getRoot().getFile(path);
- XModelObject p = f == null ? null : EclipseResourceUtil
- .getObjectByResource(f.getParent());
- if (p instanceof FolderImpl) {
- ((FolderImpl) p).update();
- }
- XModelObject o = EclipseResourceUtil.getObjectByResource(f);
- if (f != null && f.exists() && o != null) {
- if (editorPart instanceof JSPMultiPageEditor) {
- JSPMultiPageEditor e = (JSPMultiPageEditor) editorPart;
- if (ei instanceof XModelObjectEditorInput) {
- IEditorInput e2 = XModelObjectEditorInput.createInstance(o);
- e.setInput(e2);
- e.updateTitle();
- if (e.sourceEditor instanceof AbstractTextEditor) {
- if (e.sourceEditor != null
- && e.sourceEditor.getEditorInput() != e
- .getEditorInput()) {
- try {
- ((AbstractTextEditor) e.sourceEditor)
- .setInput(e2);
- } catch (Exception exc) {
- JspEditorPlugin.getPluginLog().logError(exc);
- }
- }
- ((XModelObjectEditorInput) ei).synchronize();
- }
- }
- }
- }
- if (f == null || f.exists())
- return;
- closeEditor();
- }
-
- private void closeEditor() {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- editorPart.getSite().getPage().closeEditor(editorPart, false);
- }
- });
- }
-
- private IPath getPathChange(IResourceChangeEvent event, IFile f) {
- return getPathChange(event.getDelta(), f.getFullPath());
- }
-
- private IPath getPathChange(IResourceDelta delta, IPath p) {
- if (delta == null || delta.getFullPath() == null)
- return null;
- if (!delta.getFullPath().isPrefixOf(p))
- return null;
- if (delta != null && delta.getKind() == IResourceDelta.CHANGED) {
- IResourceDelta[] ds = delta.getAffectedChildren();
- if (ds == null)
- return null;
- if (ds.length == 2) {
- if (ds[1].getKind() == IResourceDelta.REMOVED) {
- IPath d = ds[1].getFullPath();
- if (d.equals(p))
- return ds[0].getFullPath();
- if (d.isPrefixOf(p)) {
- return ds[0].getFullPath().append(
- p.removeFirstSegments(d.segmentCount()));
- }
- } else if (ds[0].getKind() == IResourceDelta.REMOVED) {
- IPath d = ds[0].getFullPath();
- if (d.equals(p))
- return ds[1].getFullPath();
- if (d.isPrefixOf(p)) {
- return ds[1].getFullPath().append(
- p.removeFirstSegments(d.segmentCount()));
- }
- }
- }
- for (int i = 0; i < ds.length; i++) {
- IPath ps = getPathChange(ds[i], p);
- if (ps != null)
- return ps;
- }
- }
- return null;
- }
+ if (o != null && o.isModified() && o.isActive()) {
+ try {
+ ((FolderImpl) o.getParent()).discardChildFile(o);
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+ }
+
+ public Object getAdapter(Class adapter) {
+ if (IContentOutlinePage.class.equals(adapter)) {
+ if (osWindows) {
+ if (visualEditor != null) {
+ if (outlinePage == null)
+ outlinePage = (ConfigurableContentOutlinePage) visualEditor
+ .getAdapter(adapter);
+ return outlinePage;
+ }
+ } else {
+ if (sourceEditor != null) {
+ return sourceEditor.getAdapter(adapter);
+ }
+ }
+ } else if (IPropertySheetPage.class.equals(adapter)) {
+ if (sourceEditor != null)
+ return sourceEditor.getAdapter(adapter);
+ } else if (adapter == EditorDescriptor.class)
+ return new EditorDescriptor(new String[] { "jsp", "html" });
+
+ if (sourceEditor != null) {
+ return sourceEditor.getAdapter(adapter);
+ }
+
+ return super.getAdapter(adapter);
+ }
+
+ public void nodeChanged(XModelTreeEvent event) {
+ if (event.getModelObject() == getModelObject()) {
+ setContentDescription(getEditorInput().getName());
+ if (sourceEditor != null)
+ sourceEditor.updateModification();
+ }
+ }
+
+ public void structureChanged(XModelTreeEvent event) {
+ }
+
+ public void close(boolean save) {
+ sourceEditor.close(save);
+ }
+
+ public void doRevertToSaved() {
+ sourceEditor.doRevertToSaved();
+ }
+
+ public IAction getAction(String actionId) {
+ return sourceEditor.getAction(actionId);
+ }
+
+ public IDocumentProvider getDocumentProvider() {
+ return sourceEditor.getDocumentProvider();
+ }
+
+ public IRegion getHighlightRange() {
+ return sourceEditor.getHighlightRange();
+ }
+
+ public ISelectionProvider getSelectionProvider() {
+ return sourceEditor.getSelectionProvider();
+ }
+
+ public boolean isEditable() {
+ return sourceEditor.isEditable();
+ }
+
+ public void removeActionActivationCode(String actionId) {
+ sourceEditor.removeActionActivationCode(actionId);
+ }
+
+ public void resetHighlightRange() {
+ sourceEditor.resetHighlightRange();
+ }
+
+ public void selectAndReveal(int offset, int length) {
+ sourceEditor.selectAndReveal(offset, length);
+ }
+
+ public void setAction(String actionID, IAction action) {
+ sourceEditor.setAction(actionID, action);
+ }
+
+ public void setActionActivationCode(String actionId,
+ char activationCharacter, int activationKeyCode,
+ int activationStateMask) {
+ sourceEditor.setActionActivationCode(actionId, activationCharacter,
+ activationKeyCode, activationStateMask);
+ }
+
+ public void setHighlightRange(int offset, int length, boolean moveCursor) {
+ sourceEditor.setHighlightRange(offset, length, moveCursor);
+ }
+
+ public void showHighlightRangeOnly(boolean showHighlightRangeOnly) {
+ sourceEditor.showHighlightRangeOnly(showHighlightRangeOnly);
+ }
+
+ public boolean showsHighlightRangeOnly() {
+ return sourceEditor.showsHighlightRangeOnly();
+ }
+
+ public VpeTaglibManager getTaglibManager() {
+ if (visualEditor != null) {
+ IVisualController controller = visualEditor.getController();
+ if (controller != null) {
+ IVisualContext context = controller.getPageContext();
+ if (context != null) {
+ if(context instanceof VpeTaglibManager)
+ return (VpeTaglibManager)context;
+ }
+ }
+ }
+ return null;
+ }
+
+ void updateTitle() {
+ setPartName(getEditorInput().getName());
+ }
+
+ public void runDropCommand(String flavor, String data) {
+ if (sourceEditor != null)
+ sourceEditor.runDropCommand(flavor, data);
+ }
+
+ public void setStatusField(IStatusField field, String category) {
+ if (sourceEditor != null)
+ sourceEditor.setStatusField(field, category);
+ }
+
+ public boolean isEditorInputReadOnly() {
+ if (sourceEditor != null) {
+ return sourceEditor.isEditorInputReadOnly();
+ }
+ return false;
+ }
+
+ public void addRulerContextMenuListener(IMenuListener listener) {
+ if (sourceEditor != null)
+ sourceEditor.addRulerContextMenuListener(listener);
+ }
+
+ public void removeRulerContextMenuListener(IMenuListener listener) {
+ if (sourceEditor != null)
+ sourceEditor.removeRulerContextMenuListener(listener);
+ }
+
+ public boolean isEditorInputModifiable() {
+ if (sourceEditor != null) {
+ return sourceEditor.isEditorInputModifiable();
+ }
+ return false;
+ }
+
+ public boolean validateEditorInputState() {
+ if (sourceEditor != null) {
+ return sourceEditor.validateEditorInputState();
+ }
+ return false;
+ }
+
+ public InsertMode getInsertMode() {
+ if (sourceEditor != null) {
+ return sourceEditor.getInsertMode();
+ }
+ return null;
+ }
+
+ public void setInsertMode(InsertMode mode) {
+ if (sourceEditor != null)
+ sourceEditor.setInsertMode(mode);
+ }
+
+ public void showChangeInformation(boolean show) {
+ if (sourceEditor != null)
+ sourceEditor.showChangeInformation(show);
+ }
+
+ public boolean isChangeInformationShowing() {
+ if (sourceEditor != null) {
+ return sourceEditor.isChangeInformationShowing();
+ }
+ return false;
+ }
+
+ public INavigationLocation createEmptyNavigationLocation() {
+ if (sourceEditor != null) {
+ return sourceEditor.createEmptyNavigationLocation();
+ }
+ return null;
+ }
+
+ public INavigationLocation createNavigationLocation() {
+ if (sourceEditor != null) {
+ return sourceEditor.createNavigationLocation();
+ }
+ return null;
+ }
+}
+
+class ResourceChangeListener implements IResourceChangeListener {
+ IEditorPart editorPart;
+
+ Composite container;
+
+ ResourceChangeListener(IEditorPart editorPart, Composite container) {
+ this.editorPart = editorPart;
+ this.container = container;
+ IWorkspace workspace = ModelUIPlugin.getWorkspace();
+ if (workspace == null)
+ return;
+ workspace.addResourceChangeListener(this);
+ container.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ IWorkspace workspace = ModelUIPlugin.getWorkspace();
+ if (workspace == null)
+ return;
+ workspace
+ .removeResourceChangeListener(ResourceChangeListener.this);
+ }
+ });
+ }
+
+ public void resourceChanged(IResourceChangeEvent event) {
+ IEditorInput ei = editorPart.getEditorInput();
+ if (!(ei instanceof IFileEditorInput))
+ return;
+ IFileEditorInput fi = (IFileEditorInput) ei;
+ IFile f = fi.getFile();
+ if (f == null)
+ return;
+ IPath path = getPathChange(event, f);
+ if (path == null) {
+ if (f != null && !f.exists())
+ closeEditor();
+ return;
+ }
+ f = ModelPlugin.getWorkspace().getRoot().getFile(path);
+ XModelObject p = f == null ? null : EclipseResourceUtil
+ .getObjectByResource(f.getParent());
+ if (p instanceof FolderImpl) {
+ ((FolderImpl) p).update();
+ }
+ XModelObject o = EclipseResourceUtil.getObjectByResource(f);
+ if (f != null && f.exists() && o != null) {
+ if (editorPart instanceof JSPMultiPageEditor) {
+ JSPMultiPageEditor e = (JSPMultiPageEditor) editorPart;
+ if (ei instanceof XModelObjectEditorInput) {
+ IEditorInput e2 = XModelObjectEditorInput.createInstance(o);
+ e.setInput(e2);
+ e.updateTitle();
+ if (e.sourceEditor instanceof AbstractTextEditor) {
+ if (e.sourceEditor != null
+ && e.sourceEditor.getEditorInput() != e
+ .getEditorInput()) {
+ try {
+ ((AbstractTextEditor) e.sourceEditor)
+ .setInput(e2);
+ } catch (Exception exc) {
+ JspEditorPlugin.getPluginLog().logError(exc);
+ }
+ }
+ ((XModelObjectEditorInput) ei).synchronize();
+ }
+ }
+ }
+ }
+ if (f == null || f.exists())
+ return;
+ closeEditor();
+ }
+
+ private void closeEditor() {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ editorPart.getSite().getPage().closeEditor(editorPart, false);
+ }
+ });
+ }
+
+ private IPath getPathChange(IResourceChangeEvent event, IFile f) {
+ return getPathChange(event.getDelta(), f.getFullPath());
+ }
+
+ private IPath getPathChange(IResourceDelta delta, IPath p) {
+ if (delta == null || delta.getFullPath() == null)
+ return null;
+ if (!delta.getFullPath().isPrefixOf(p))
+ return null;
+ if (delta != null && delta.getKind() == IResourceDelta.CHANGED) {
+ IResourceDelta[] ds = delta.getAffectedChildren();
+ if (ds == null)
+ return null;
+ if (ds.length == 2) {
+ if (ds[1].getKind() == IResourceDelta.REMOVED) {
+ IPath d = ds[1].getFullPath();
+ if (d.equals(p))
+ return ds[0].getFullPath();
+ if (d.isPrefixOf(p)) {
+ return ds[0].getFullPath().append(
+ p.removeFirstSegments(d.segmentCount()));
+ }
+ } else if (ds[0].getKind() == IResourceDelta.REMOVED) {
+ IPath d = ds[0].getFullPath();
+ if (d.equals(p))
+ return ds[1].getFullPath();
+ if (d.isPrefixOf(p)) {
+ return ds[1].getFullPath().append(
+ p.removeFirstSegments(d.segmentCount()));
+ }
+ }
+ }
+ for (int i = 0; i < ds.length; i++) {
+ IPath ps = getPathChange(ds[i], p);
+ if (ps != null)
+ return ps;
+ }
+ }
+ return null;
+ }
}
\ No newline at end of file
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -1,1082 +1,1131 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.jst.jsp.jspeditor;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Properties;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextListener;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.TextEvent;
-import org.eclipse.jface.text.formatter.IContentFormatter;
-import org.eclipse.jface.text.source.IAnnotationModel;
-import org.eclipse.jface.text.source.IOverviewRuler;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.IVerticalRuler;
-import org.eclipse.jface.text.source.SourceViewerConfiguration;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jst.jsp.ui.StructuredTextViewerConfigurationJSP;
-import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DragSource;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.DropTargetListener;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.HTMLTransfer;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.editors.text.ILocationProvider;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.texteditor.ITextEditorActionConstants;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.ui.views.properties.PropertySheetPage;
-import org.eclipse.ui.views.properties.PropertySheetSorter;
-import org.eclipse.wst.html.ui.StructuredTextViewerConfigurationHTML;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
-import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
-import org.eclipse.wst.sse.ui.StructuredTextEditor;
-import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration;
-import org.eclipse.wst.sse.ui.internal.IModelProvider;
-import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
-import org.eclipse.wst.sse.ui.internal.actions.StructuredTextEditorActionConstants;
-import org.eclipse.wst.sse.ui.internal.contentoutline.ConfigurableContentOutlinePage;
-import org.eclipse.wst.sse.ui.internal.properties.ConfigurablePropertySheetPage;
-import org.eclipse.wst.sse.ui.internal.provisional.extensions.ConfigurationPointCalculator;
-import org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration;
-import org.eclipse.wst.xml.core.internal.document.AttrImpl;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
-import org.jboss.tools.common.meta.action.XActionInvoker;
-import org.jboss.tools.common.model.XModelBuffer;
-import org.jboss.tools.common.model.XModelObject;
-import org.jboss.tools.common.model.XModelTransferBuffer;
-import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
-import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
-import org.jboss.tools.common.model.ui.ModelUIPlugin;
-import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
-import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
-import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
-import org.jboss.tools.common.model.ui.editors.dnd.DropData;
-import org.jboss.tools.common.model.ui.editors.dnd.IDropCommand;
-import org.jboss.tools.common.model.ui.editors.dnd.JSPTagProposalFactory;
-import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
-import org.jboss.tools.common.model.ui.texteditors.TextMerge;
-import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDrop;
-import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDropProvider;
-import org.jboss.tools.common.model.ui.views.palette.IIgnoreSelection;
-import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
-import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
-import org.jboss.tools.common.text.xml.IOccurrencePreferenceProvider;
-import org.jboss.tools.common.text.xml.XmlEditorPlugin;
-import org.jboss.tools.common.text.xml.ui.FreeCaretStyledText;
-import org.jboss.tools.jst.jsp.ExtendedStructuredTextViewerConfigurationHTML;
-import org.jboss.tools.jst.jsp.ExtendedStructuredTextViewerConfigurationJSP;
-import org.jboss.tools.jst.jsp.JspEditorPlugin;
-import org.jboss.tools.jst.jsp.editor.IJSPTextEditor;
-import org.jboss.tools.jst.jsp.editor.ITextFormatter;
-import org.jboss.tools.jst.jsp.editor.IVisualController;
-import org.jboss.tools.jst.jsp.outline.JSPContentOutlineConfiguration;
-import org.jboss.tools.jst.jsp.outline.JSPPropertySheetConfiguration;
-import org.jboss.tools.jst.jsp.preferences.VpePreference;
-import org.jboss.tools.jst.jsp.support.kb.WTPTextJspKbConnector;
-import org.jboss.tools.jst.jsp.text.xpl.IStructuredTextOccurrenceStructureProvider;
-import org.jboss.tools.jst.jsp.text.xpl.StructuredTextOccurrenceStructureProviderRegistry;
-import org.jboss.tools.jst.jsp.ui.action.ExtendedFormatAction;
-import org.jboss.tools.jst.jsp.ui.action.IExtendedAction;
-import org.jboss.tools.jst.web.tld.VpeTaglibManager;
-import org.jboss.tools.jst.web.tld.VpeTaglibManagerProvider;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-/**
- * @author Jeremy
- *
- */
-public class JSPTextEditor extends StructuredTextEditor implements
- ITextListener, IJSPTextEditor, ITextFormatter,
- IOccurrencePreferenceProvider {
- private IStructuredTextOccurrenceStructureProvider fOccurrenceModelUpdater;
-
- TextEditorDrop dnd = new TextEditorDrop();
-
- JSPMultiPageEditor parentEditor;
-
- long timeStamp = -1;
-
- long savedTimeStamp = -1;
-
- IVisualController vpeController;
-
- public JSPTextEditor(JSPMultiPageEditor parentEditor) {
- JspEditorPlugin.getDefault().initDefaultPluginPreferences();
- dnd.setTextEditorDropProvider(new TextEditorDropProviderImpl());
- this.parentEditor = parentEditor;
- super
- .setSourceViewerConfiguration(new ExtendedStructuredTextViewerConfigurationJSP());
- }
-
- protected void setSourceViewerConfiguration(SourceViewerConfiguration config) {
- if (config instanceof StructuredTextViewerConfigurationJSP) {
- if (!(config instanceof ExtendedStructuredTextViewerConfigurationJSP)) {
- config = new ExtendedStructuredTextViewerConfigurationJSP();
- }
- } else if (config instanceof StructuredTextViewerConfigurationHTML) {
- if (!(config instanceof ExtendedStructuredTextViewerConfigurationHTML)) {
- config = new ExtendedStructuredTextViewerConfigurationHTML();
- }
- } else {
- config = new ExtendedStructuredTextViewerConfigurationJSP();
- }
- super.setSourceViewerConfiguration(config);
- }
-
- protected void initializeDrop(ITextViewer textViewer) {
-
- Composite c = textViewer.getTextWidget();
- Label l = new Label(c, SWT.NONE);
- l.dispose();
- }
-
- private ConfigurableContentOutlinePage fOutlinePage = null;
-
- private OutlinePageListener fOutlinePageListener = null;
-
- private IPropertySheetPage fPropertySheetPage;
-
- public Object getAdapter(Class adapter) {
- if (ISourceViewer.class.equals(adapter)) {
- return JSPTextEditor.this.getSourceViewer();
- } else if (IContentOutlinePage.class.equals(adapter)) {
- if (fOutlinePage == null || fOutlinePage.getControl() == null
- || fOutlinePage.getControl().isDisposed()) {
- IStructuredModel internalModel = getModel();
- ContentOutlineConfiguration cfg = new JSPContentOutlineConfiguration(
- this);
- if (cfg != null) {
- ConfigurableContentOutlinePage outlinePage = new ConfigurableContentOutlinePage();
- outlinePage.setConfiguration(cfg);
- if (internalModel != null) {
- outlinePage.setInputContentTypeIdentifier(internalModel
- .getContentTypeIdentifier());
- outlinePage.setInput(internalModel);
- }
-
- if (fOutlinePageListener == null) {
- fOutlinePageListener = new OutlinePageListener();
- }
-
- outlinePage
- .addSelectionChangedListener(fOutlinePageListener);
- outlinePage.addDoubleClickListener(fOutlinePageListener);
-
- fOutlinePage = outlinePage;
- }
- }
- return fOutlinePage;
- } else if (IPropertySheetPage.class == adapter) {
- if (fPropertySheetPage == null
- || fPropertySheetPage.getControl() == null
- || fPropertySheetPage.getControl().isDisposed()) {
- JSPPropertySheetConfiguration cfg = new JSPPropertySheetConfiguration();
- if (cfg != null) {
- ConfigurablePropertySheetPage propertySheetPage = new ConfigurablePropertySheetPage();
- propertySheetPage.setConfiguration(cfg);
- fPropertySheetPage = propertySheetPage;
- setSorter(cfg.getSorter(), propertySheetPage);
- }
- }
- return fPropertySheetPage;
- }
- return super.getAdapter(adapter);
- }
-
- private void setSorter(PropertySheetSorter sorter,
- ConfigurablePropertySheetPage sheet) {
- try {
- Method method = PropertySheetPage.class.getDeclaredMethod(
- "setSorter", new Class[] { PropertySheetSorter.class });
- method.setAccessible(true);
- method.invoke(sheet, new Object[] { sorter });
- } catch (Exception e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
-
- public String getEditorId() {
- return JSPUIPlugin.ID;
- }
-
- public IStructuredTextOccurrenceStructureProvider getOccurrencePreferenceProvider() {
- return fOccurrenceModelUpdater;
- }
-
- public void createPartControl(Composite parent) {
- super.createPartControl(parent);
-
- StructuredTextOccurrenceStructureProviderRegistry registry = XmlEditorPlugin
- .getDefault().getOccurrenceStructureProviderRegistry(
- JspEditorPlugin.PLUGIN_ID);
- fOccurrenceModelUpdater = registry
- .getCurrentOccurrenceProvider(JspEditorPlugin.PLUGIN_ID);
-
- if (fOccurrenceModelUpdater != null)
- fOccurrenceModelUpdater.install(this, getTextViewer());
-
- installActivePropmtSupport();
-
- createDrop();
- setModified(false);
- getSourceViewer().removeTextListener(this);
- getSourceViewer().addTextListener(this);
-
- Object dtid = getSourceViewer().getTextWidget().getData("DropTarget");
- if (dtid != null) {
- if (dtid instanceof DropTarget) {
- DropTarget dropTarget = (DropTarget) dtid;
- dropTarget.addDropListener(new DropTargetAdapter() {
- private FreeCaretStyledText getFreeCaretControl(
- Object sourceOrTarget) {
- if (sourceOrTarget == null)
- return null;
-
- Object control = null;
-
- if (sourceOrTarget instanceof DropTarget) {
- control = ((DropTarget) sourceOrTarget)
- .getControl();
- } else if (sourceOrTarget instanceof DragSource) {
- control = ((DragSource) sourceOrTarget)
- .getControl();
- } else
- return null;
-
- if (control instanceof FreeCaretStyledText)
- return (FreeCaretStyledText) control;
- return null;
- }
-
- private int getPosition(StyledText t, int x, int y) {
- try {
- Point pp = t.toControl(x, y);
- x = pp.x;
- y = pp.y;
- int lineIndex = (t.getTopPixel() + y)
- / t.getLineHeight();
- if (lineIndex >= t.getLineCount()) {
- return t.getCharCount();
- } else {
- int c = 0;
- try {
- c = t.getOffsetAtLocation(new Point(x, y));
- if (c < 0)
- c = 0;
- } catch (Exception ex) {
- c = t.getOffsetAtLine(lineIndex + 1)
- - (t.getLineDelimiter() == null ? 0
- : t.getLineDelimiter()
- .length());
- }
- return c;
- }
- } catch (Exception e) {
- return 0;
- }
- }
-
- public void dragEnter(DropTargetEvent event) {
- getFreeCaretControl(event.widget).enableFreeCaret(true);
- }
-
- public void dragLeave(DropTargetEvent event) {
- getFreeCaretControl(event.widget).enableFreeCaret(false);
- }
-
- public void dragOperationChanged(DropTargetEvent event) {
- getFreeCaretControl(event.widget).enableFreeCaret(false);
- }
-
- public void dragOver(DropTargetEvent event) {
- FreeCaretStyledText fcst = getFreeCaretControl(event.widget);
- int pos = getPosition(fcst, event.x, event.y);
- Point p = fcst.getLocationAtOffset(pos);
- fcst.myRedraw(p.x, p.y);
- }
-
- public void drop(DropTargetEvent event) {
- getFreeCaretControl(event.widget).enableFreeCaret(false);
- }
- });
- }
- }
- }
-
- protected ISourceViewer createSourceViewer(Composite parent,
- IVerticalRuler ruler, int styles) {
- ISourceViewer sv = super.createSourceViewer(parent, ruler, styles);
- sv.getTextWidget().addFocusListener(new TextFocusListener());
- return sv;
- }
-
- protected StructuredTextViewer createStructedTextViewer(Composite parent,
- IVerticalRuler verticalRuler, int styles) {
- return new JSPStructuredTextViewer(parent, verticalRuler,
- getOverviewRuler(), isOverviewRulerVisible(), styles,
- parentEditor, this);
- }
-
- class TextFocusListener extends FocusAdapter {
- public void focusLost(FocusEvent e) {
- if (JSPTextEditor.super.isDirty()) {
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- try {
- Thread.sleep(200);
- } catch (InterruptedException exc) {
- JspEditorPlugin.getPluginLog().logError(exc);
- }
- save();
- }
- });
- }
- }
- }
-
- public void save() {
- if (!lock && isModified()) {
- lock = true;
- try {
- FileAnyImpl f = (FileAnyImpl) getModelObject();
- if (f != null)
- f.edit(getSourceViewer().getDocument().get());
- } catch (Exception e) {
- JspEditorPlugin.getPluginLog().logError(e);
- } finally {
- setModified(false);
- lock = false;
- }
- }
- }
-
- boolean modified = false;
-
- public void setModified(boolean set) {
- if (this.modified != set) {
- this.modified = set;
- if (set) {
- XModelObject o = getModelObject();
- if (o != null)
- o.setModified(true);
- }
- super.firePropertyChange(IEditorPart.PROP_DIRTY);
- }
- }
-
- public void updateModification() {
- XModelObject object = getModelObject();
- if (object != null && !object.isModified() && isModified()) {
- setModified(false);
- } else {
- firePropertyChange(ITextEditor.PROP_DIRTY);
- }
- }
-
- public boolean isModified() {
- return modified;
- }
-
- protected void doSetInput(IEditorInput input) throws CoreException {
- super.doSetInput(XModelObjectEditorInput.checkInput(input));
- if (getSourceViewer() != null
- && getSourceViewer().getDocument() != null) {
- getSourceViewer().removeTextListener(this);
- getSourceViewer().addTextListener(this);
- }
- if (listener != null)
- listener.dispose();
- listener = null;
- XModelObject o = getModelObject();
- if (o instanceof FileAnyImpl) {
- listener = new BodyListenerImpl((FileAnyImpl) o);
- }
- }
-
- boolean lock = false;
-
- public boolean isDirty() {
- if (getEditorInput() instanceof IModelObjectEditorInput) {
- XModelObject o = getModelObject();
- if (o != null && o.isModified())
- return true;
- else {
- return isModified();
- }
- } else {
- return super.isDirty();
- }
- }
-
- public void doSave(IProgressMonitor monitor) {
- XModelObject o = getModelObject();
- super.doSave(monitor);
- if (o != null && (monitor == null || !monitor.isCanceled())) {
- if (o != null)
- save();
- if (getEditorInput() instanceof ILocationProvider) {
- XModelObject p = o.getParent();
- if (p instanceof FolderImpl) {
- ((FolderImpl) p).saveChild(o);
- }
- } else {
- o.setModified(false);
- XModelObjectLoaderUtil.updateModifiedOnSave(o);
- }
- super.firePropertyChange(IEditorPart.PROP_DIRTY);
- }
- }
-
- public void firePropertyChangeDirty() {
- super.firePropertyChange(IEditorPart.PROP_DIRTY);
- }
-
- public XModelObject getModelObject() {
- if (getEditorInput() instanceof IModelObjectEditorInput) {
- return ((IModelObjectEditorInput) getEditorInput())
- .getXModelObject();
- }
- return null;
- }
-
- class TextEditorDropProviderImpl implements TextEditorDropProvider {
-
- public ISourceViewer getSourceViewer() {
- return JSPTextEditor.this.getSourceViewer();
- }
-
- public XModelObject getModelObject() {
- return JSPTextEditor.this.getModelObject();
- }
-
- public void insert(Properties p) {
- PaletteInsertHelper.insertIntoEditor(getSourceViewer(), p);
- }
-
- }
-
- public void textChanged(TextEvent event) {
- if (event.getDocumentEvent() != null) {
- setModified(true);
- }
- }
-
- public void doRevertToSaved() {
- save();
- XModelObject o = getModelObject();
- if (o == null) {
- super.doRevertToSaved();
- return;
- }
- Properties p = new Properties();
- XActionInvoker.invoke("DiscardActions.Discard", o, p);
- if (!"true".equals(p.getProperty("done")))
- return;
- super.doRevertToSaved();
- if (o.isModified())
- o.setModified(false);
- modified = false;
- firePropertyChange(IEditorPart.PROP_DIRTY);
- updatePartControl(getEditorInput());
- }
-
- public IAnnotationModel getAnnotationModel() {
- return getSourceViewer().getAnnotationModel();
- }
-
- private WTPTextJspKbConnector wtpTextJspKbConnector;
-
- private void installActivePropmtSupport() {
- try {
- IDocument document = getTextViewer().getDocument();
- IStructuredModel model = null;
- if (getDocumentProvider() instanceof IModelProvider) {
- model = ((IModelProvider) getDocumentProvider())
- .getModel(getEditorInput());
- } else {
- if (document instanceof IStructuredDocument) {
- model = getModel();
- }
- }
- if (wtpTextJspKbConnector == null
- && model != null
- && (getContentType().toLowerCase().indexOf("jsp") != -1 || getContentType()
- .toLowerCase().indexOf("html") != -1)) {
- wtpTextJspKbConnector = new WTPTextJspKbConnector(
- getEditorInput(), document, model);
- wtpTextJspKbConnector.setTaglibManagerProvider(parentEditor);
- }
- } catch (Exception x) {
- JspEditorPlugin.getPluginLog().logError("Error while installing active prpmpting support", x);
- }
- }
-
- private String getContentType() {
- String type = null;
- try {
- type = getModel().getContentTypeIdentifier();
- } finally {
- if (type == null)
- type = "";
- }
- return type;
- }
-
- public WTPTextJspKbConnector getWTPTextJspKbConnector() {
- return wtpTextJspKbConnector;
- }
-
- public static class JSPStructuredTextViewer extends StructuredTextViewer
- implements VpeTaglibManagerProvider, IIgnoreSelection {
-
- boolean insertFromPallete = false;
-
- private VpeTaglibManagerProvider provider;
-
- private JSPTextEditor editor;
-
- private boolean ignore = false;
-
- public JSPStructuredTextViewer(Composite parent,
- IVerticalRuler verticalRuler, int styles) {
- super(parent, verticalRuler, null, false, styles);
- }
-
- public JSPStructuredTextViewer(Composite parent,
- IVerticalRuler verticalRuler, IOverviewRuler overviewRuler,
- boolean showAnnotationsOverview, int styles,
- VpeTaglibManagerProvider provider, JSPTextEditor editor) {
- super(parent, verticalRuler, overviewRuler,
- showAnnotationsOverview, styles);
- this.provider = provider;
- this.editor = editor;
- }
-
- protected StyledText createTextWidget(Composite parent, int styles) {
- return new FreeCaretStyledText(parent, styles);
- }
-
- public VpeTaglibManager getTaglibManager() {
- if (provider != null) {
- return provider.getTaglibManager();
- }
- return null;
- }
-
- public boolean doesIgnore() {
- return ignore;
- }
-
- public void setIgnore(boolean ignore) {
- this.ignore = ignore;
- }
-
- public void doOperation(int operation) {
- if (operation == UNDO || operation == REDO
- || operation == FORMAT_DOCUMENT
- || operation == FORMAT_ACTIVE_ELEMENTS) {
- if (editor.getVPEController() != null) {
- editor.getVPEController().preLongOperation();
- }
- }
-
- super.doOperation(operation);
-
- if (operation == UNDO || operation == REDO
- || operation == FORMAT_DOCUMENT
- || operation == FORMAT_ACTIVE_ELEMENTS) {
- if (editor.getVPEController() != null) {
- editor.getVPEController().postLongOperation();
- }
- }
- }
-
- protected void handleDispose() {
- if (editor != null && editor.getSourceViewer() != null && editor.getSourceViewer().getTextWidget() != null && editor.getVPEController() != null) {
- StyledText widget = editor.getSourceViewer().getTextWidget();
- widget.removeSelectionListener(editor.getVPEController());
- }
- super.handleDispose();
- }
- }
-
- public JSPMultiPageEditor getParentEditor() {
- return parentEditor;
- }
-
- public void setVPEController(IVisualController c) {
- vpeController = c;
- }
-
- public IVisualController getVPEController() {
- return vpeController;
- }
-
- public void runDropCommand(final String flavor, final String data) {
- XModelBuffer b = XModelTransferBuffer.getInstance().getBuffer();
- final XModelObject o = b == null ? null : b.source();
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if (parentEditor.getVisualEditor().getController() != null) {
- if(o != null && !XModelTransferBuffer.getInstance().isEnabled()) {
- XModelTransferBuffer.getInstance().enable();
- XModelTransferBuffer.getInstance().getBuffer().addSource(o);
- }
- try {
- DropData dropData = new DropData(flavor,
- data,
- parentEditor.getVisualEditor().getController()
- .getPageContext(),
- getEditorInput(), getSourceViewer(),
- getSelectionProvider());
- dropData.setAttributeName(dropContext.getAttributeName());
- IDropCommand dropCommand = DropCommandFactory.getInstance().getDropCommand(flavor, JSPTagProposalFactory.getInstance());
-
- boolean promptAttributes = "yes".equals(VpePreference.ALWAYS_REQUEST_FOR_ATTRIBUTE.getValue());
- dropCommand.getDefaultModel().setPromptForTagAttributesRequired(promptAttributes);
- dropCommand.execute(dropData);
- } finally {
- XModelTransferBuffer.getInstance().disable();
- }
- }
- }
- });
- }
-
- private void createDrop() {
- DropTarget target = new DropTarget(getSourceViewer().getTextWidget(),
- DND.DROP_MOVE | DND.DROP_COPY);
- Transfer[] types = new Transfer[] { ModelTransfer.getInstance(),
- HTMLTransfer.getInstance(), TextTransfer.getInstance(),
- FileTransfer.getInstance() };
- target.setTransfer(types);
- target.addDropListener(new DTL());
- }
-
- DropContext dropContext = new DropContext();
-
- class DTL implements DropTargetListener {
- int lastpos = -1;
-
- int lastdetail = -1;
-
- public void dragEnter(DropTargetEvent event) {
- lastpos = -1;
- }
-
- public void dragLeave(DropTargetEvent event) {
- lastpos = -1;
- }
-
- public void dragOperationChanged(DropTargetEvent event) {
- }
-
- public void dragOver(DropTargetEvent event) {
- if (!isEditable()
- || (getModelObject() != null && !getModelObject()
- .isObjectEditable())) {
- event.detail = DND.DROP_NONE;
- return;
- }
- dropContext.setDropTargetEvent(event);
- if (dropContext.getFlavor() == null) {
- event.detail = DND.DROP_NONE;
- return;
- }
- // Drop from VPE to Source is forbidden
- if (dropContext.getFlavor().equals("text/html")) {
- if (InnerDragBuffer.object != null) {
- event.detail = DND.DROP_NONE;
- }
- return;
- }
- int pos = getPosition(event.x, event.y);
- if (lastpos == pos && pos >= 0) {
- pos = lastpos;
- event.detail = lastdetail;
- return;
- }
- lastpos = pos;
- dropContext.clean();
- getSourceViewer().getDocument();
- IndexedRegion region = getModel().getIndexedRegion(pos);
- if (region instanceof ElementImpl) {
- ElementImpl jspElement = (ElementImpl) region;
- NamedNodeMap attributes = jspElement.getAttributes();
- if (pos == jspElement.getStartOffset()
- || pos == jspElement.getEndStartOffset()) {
- event.detail = lastdetail = DND.DROP_MOVE;
- return;
- }
- for (int i = 0; i < attributes.getLength(); i++) {
- Node attribute = attributes.item(i);
- if (attribute instanceof AttrImpl) {
- AttrImpl jspAttr = (AttrImpl) attribute;
- ITextRegion valueRegion = jspAttr.getValueRegion();
- if (valueRegion == null) {
- event.detail = lastdetail = DND.DROP_NONE;
- return;
- }
- int startPos = jspElement.getStartOffset()
- + valueRegion.getStart();
- int endPos = jspElement.getStartOffset()
- + valueRegion.getTextEnd();
- if (pos > startPos && pos < endPos) {
- dropContext.setOverAttributeValue(true);
- dropContext.setAttributeName(jspAttr.getNodeName());
- event.detail = lastdetail = DND.DROP_MOVE;
- return;
- }
- }
- }
- event.detail = lastdetail = DND.DROP_NONE;
- } else if (region instanceof Text
- && isInsideResponseRedirect((Text) region, pos
- - region.getStartOffset())) {
- dropContext.setOverAttributeValue(true);
- event.detail = lastdetail = DND.DROP_MOVE;
- } else if (region instanceof Text) {
- event.detail = lastdetail = DND.DROP_MOVE;
- } else if (region instanceof DocumentType) {
- event.detail = lastdetail = DND.DROP_NONE;
- } else if (region == null) {
- //new place
- event.detail = lastdetail = DND.DROP_MOVE;
- }
- }
-
- public void drop(DropTargetEvent event) {
- int offset = getPosition(event.x, event.y);
- selectAndReveal(offset, 0);
- dropContext.runDropCommand(JSPTextEditor.this, event);
- }
-
- public void dropAccept(DropTargetEvent event) {
- }
-
- }
-
- private int getPosition(int x, int y) {
- try {
- ISourceViewer v = getSourceViewer();
- StyledText t = v.getTextWidget();
- Point pp = t.toControl(x, y);
- x = pp.x;
- y = pp.y;
- int lineIndex = (t.getTopPixel() + y) / t.getLineHeight();
- if (lineIndex >= t.getLineCount()) {
- return t.getCharCount();
- } else {
- int c = 0;
- try {
- c = t.getOffsetAtLocation(new Point(x, y));
- if (c < 0)
- c = 0;
- } catch (Exception ex) {
- c = t.getOffsetAtLine(lineIndex + 1)
- - (t.getLineDelimiter() == null ? 0 : t
- .getLineDelimiter().length());
- }
- return c;
- }
- } catch (Exception e) {
- return 0;
- }
- }
-
- public String[] getConfigurationPoints() {
- String contentTypeIdentifierID = null;
- if (getModel() != null)
- contentTypeIdentifierID = getModel().getContentTypeIdentifier();
- return ConfigurationPointCalculator.getConfigurationPoints(this,
- contentTypeIdentifierID, ConfigurationPointCalculator.SOURCE,
- StructuredTextEditor.class);
- }
-
- public void formatTextRegion(IDocument document, IRegion region) {
- SourceViewerConfiguration conf = getSourceViewerConfiguration();
-
- if (conf instanceof StructuredTextViewerConfiguration) {
- StructuredTextViewerConfiguration stvc = (StructuredTextViewerConfiguration) conf;
- IContentFormatter f = stvc.getContentFormatter(getSourceViewer());
- f.format(document, region);
- }
- }
-
- Point storedSelection = new Point(0, 0);
-
- protected void handleCursorPositionChanged() {
- super.handleCursorPositionChanged();
- ISelection selection = getSelectionProvider().getSelection();
- Point p = getTextViewer().getTextWidget().getSelection();
- if (storedSelection == null || !storedSelection.equals(p)) {
- storedSelection = p;
- if (selection instanceof ITextSelection) {
- ITextSelection ts = (ITextSelection) selection;
- if (ts.getLength() == 0) {
- if (vpeController != null) {
- vpeController
- .selectionChanged(new SelectionChangedEvent(
- getSelectionProvider(),
- getSelectionProvider().getSelection()));
- }
- }
- }
- }
- }
-
- static int firingSelectionFailedCount = 0;
-
- private class OutlinePageListener implements IDoubleClickListener,
- ISelectionChangedListener {
- public void doubleClick(DoubleClickEvent event) {
- if (event.getSelection().isEmpty())
- return;
-
- int start = -1;
- int length = 0;
- if (event.getSelection() instanceof IStructuredSelection) {
- ISelection currentSelection = getSelectionProvider()
- .getSelection();
- if (currentSelection instanceof IStructuredSelection) {
- Object current = ((IStructuredSelection) currentSelection)
- .toArray();
- Object newSelection = ((IStructuredSelection) event
- .getSelection()).toArray();
- if (!current.equals(newSelection)) {
- IStructuredSelection selection = (IStructuredSelection) event
- .getSelection();
- Object o = selection.getFirstElement();
- if (o instanceof IndexedRegion) {
- start = ((IndexedRegion) o).getStartOffset();
- length = ((IndexedRegion) o).getEndOffset() - start;
- } else if (o instanceof ITextRegion) {
- start = ((ITextRegion) o).getStart();
- length = ((ITextRegion) o).getEnd() - start;
- } else if (o instanceof IRegion) {
- start = ((ITextRegion) o).getStart();
- length = ((ITextRegion) o).getLength();
- }
- }
- }
- } else if (event.getSelection() instanceof ITextSelection) {
- start = ((ITextSelection) event.getSelection()).getOffset();
- length = ((ITextSelection) event.getSelection()).getLength();
- }
- if (start > -1) {
- getSourceViewer().setRangeIndication(start, length, false);
- selectAndReveal(start, length);
- }
- }
-
- public void selectionChanged(SelectionChangedEvent event) {
- if (event.getSelection().isEmpty() || isFiringSelection())
- return;
-
- boolean ignoreSelection = false;
- if (getSourceViewer() != null
- && getSourceViewer() instanceof IIgnoreSelection) {
- IIgnoreSelection is = ((IIgnoreSelection) getSourceViewer());
- ignoreSelection = is.doesIgnore();
- }
- if (getSourceViewer() != null
- && getSourceViewer().getTextWidget() != null
- && !getSourceViewer().getTextWidget().isDisposed()
- && !getSourceViewer().getTextWidget().isFocusControl()
- && !ignoreSelection) {
- int start = -1;
- int length = 0;
- if (event.getSelection() instanceof IStructuredSelection) {
- ISelection current = getSelectionProvider().getSelection();
- if (current instanceof IStructuredSelection) {
- Object[] currentSelection = ((IStructuredSelection) current)
- .toArray();
- Object[] newSelection = ((IStructuredSelection) event
- .getSelection()).toArray();
- if (!Arrays.equals(currentSelection, newSelection)) {
- if (newSelection.length > 0) {
- /*
- * No ordering is guaranteed for multiple
- * selection
- */
- Object o = newSelection[0];
- if (o instanceof IndexedRegion) {
- start = ((IndexedRegion) o)
- .getStartOffset();
- int end = ((IndexedRegion) o)
- .getEndOffset();
- if (newSelection.length > 1) {
- for (int i = 1; i < newSelection.length; i++) {
- start = Math
- .min(
- start,
- ((IndexedRegion) newSelection[i])
- .getStartOffset());
- end = Math
- .max(
- end,
- ((IndexedRegion) newSelection[i])
- .getEndOffset());
- }
- length = end - start;
- }
- } else if (o instanceof ITextRegion) {
- start = ((ITextRegion) o).getStart();
- int end = ((ITextRegion) o).getEnd();
- if (newSelection.length > 1) {
- for (int i = 1; i < newSelection.length; i++) {
- start = Math
- .min(
- start,
- ((ITextRegion) newSelection[i])
- .getStart());
- end = Math
- .max(
- end,
- ((ITextRegion) newSelection[i])
- .getEnd());
- }
- length = end - start;
- }
- } else if (o instanceof IRegion) {
- start = ((IRegion) o).getOffset();
- int end = start + ((IRegion) o).getLength();
- if (newSelection.length > 1) {
- for (int i = 1; i < newSelection.length; i++) {
- start = Math.min(start,
- ((IRegion) newSelection[i])
- .getOffset());
- end = Math
- .max(
- end,
- ((IRegion) newSelection[i])
- .getOffset()
- + ((IRegion) newSelection[i])
- .getLength());
- }
- length = end - start;
- }
- }
- }
- }
- }
- } else if (event.getSelection() instanceof ITextSelection) {
- start = ((ITextSelection) event.getSelection()).getOffset();
- }
- if (start > -1) {
- updateRangeIndication0(event.getSelection());
- selectAndReveal(start, length);
- }
- }
- }
-
- Method m = null;
-
- private boolean isFiringSelection() {
- if (getSelectionProvider() == null)
- return false;
- if (firingSelectionFailedCount > 0)
- return false;
- try {
- if (m == null) {
- Class c = getSelectionProvider().getClass();
- m = c.getDeclaredMethod("isFiringSelection", new Class[0]);
- m.setAccessible(true);
- }
- Boolean b = (Boolean) m.invoke(getSelectionProvider(),
- new Object[0]);
- return b.booleanValue();
- } catch (Exception e) {
- firingSelectionFailedCount++;
- JspEditorPlugin.getPluginLog().logError(e);
- }
- return false;
- }
- }
-
- private void updateRangeIndication0(ISelection selection) {
- if (selection instanceof IStructuredSelection
- && !((IStructuredSelection) selection).isEmpty()) {
- Object[] objects = ((IStructuredSelection) selection).toArray();
- if (objects.length > 0) {
- int start = ((IndexedRegion) objects[0]).getStartOffset();
- int end = ((IndexedRegion) objects[objects.length - 1])
- .getEndOffset();
- getSourceViewer().setRangeIndication(start, end - start, false);
- } else {
- getSourceViewer().removeRangeIndication();
- }
- } else {
- if (selection instanceof ITextSelection) {
- getSourceViewer().setRangeIndication(
- ((ITextSelection) selection).getOffset(),
- ((ITextSelection) selection).getLength(), false);
- } else {
- getSourceViewer().removeRangeIndication();
- }
- }
- }
-
- protected IExtendedAction createExtendedAction(String actionID) {
- if (StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT
- .equals(actionID)
- || ITextEditorActionConstants.UNDO.equals(actionID)
- || ITextEditorActionConstants.REDO.equals(actionID)) {
- return new ExtendedFormatAction(this, actionID);
- }
- return null;
- }
-
- protected void initializeEditor() {
- super.initializeEditor();
- getPreferenceStore();
- }
-
- public void dispose() {
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.jst.jsp.jspeditor;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextListener;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.TextEvent;
+import org.eclipse.jface.text.formatter.IContentFormatter;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.jface.text.source.IOverviewRuler;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.IVerticalRuler;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jst.jsp.ui.StructuredTextViewerConfigurationJSP;
+import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.HTMLTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.editors.text.ILocationProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheetSorter;
+import org.eclipse.wst.html.ui.StructuredTextViewerConfigurationHTML;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration;
+import org.eclipse.wst.sse.ui.internal.IModelProvider;
+import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
+import org.eclipse.wst.sse.ui.internal.actions.StructuredTextEditorActionConstants;
+import org.eclipse.wst.sse.ui.internal.contentoutline.ConfigurableContentOutlinePage;
+import org.eclipse.wst.sse.ui.internal.properties.ConfigurablePropertySheetPage;
+import org.eclipse.wst.sse.ui.internal.provisional.extensions.ConfigurationPointCalculator;
+import org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration;
+import org.eclipse.wst.xml.core.internal.document.AttrImpl;
+import org.eclipse.wst.xml.core.internal.document.DOMModelImpl;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
+import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
+import org.jboss.tools.common.meta.action.XActionInvoker;
+import org.jboss.tools.common.model.XModelBuffer;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.XModelTransferBuffer;
+import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
+import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
+import org.jboss.tools.common.model.ui.ModelUIPlugin;
+import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
+import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
+import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
+import org.jboss.tools.common.model.ui.editors.dnd.DropData;
+import org.jboss.tools.common.model.ui.editors.dnd.IDropCommand;
+import org.jboss.tools.common.model.ui.editors.dnd.JSPTagProposalFactory;
+import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
+import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
+import org.jboss.tools.common.model.ui.texteditors.TextMerge;
+import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDrop;
+import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDropProvider;
+import org.jboss.tools.common.model.ui.views.palette.IIgnoreSelection;
+import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
+import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
+import org.jboss.tools.common.text.xml.IOccurrencePreferenceProvider;
+import org.jboss.tools.common.text.xml.XmlEditorPlugin;
+import org.jboss.tools.common.text.xml.ui.FreeCaretStyledText;
+import org.jboss.tools.jst.jsp.ExtendedStructuredTextViewerConfigurationHTML;
+import org.jboss.tools.jst.jsp.ExtendedStructuredTextViewerConfigurationJSP;
+import org.jboss.tools.jst.jsp.JspEditorPlugin;
+import org.jboss.tools.jst.jsp.editor.IJSPTextEditor;
+import org.jboss.tools.jst.jsp.editor.ITextFormatter;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.jst.jsp.editor.IVisualController;
+import org.jboss.tools.jst.jsp.outline.JSPContentOutlineConfiguration;
+import org.jboss.tools.jst.jsp.outline.JSPPropertySheetConfiguration;
+import org.jboss.tools.jst.jsp.preferences.VpePreference;
+import org.jboss.tools.jst.jsp.support.kb.WTPTextJspKbConnector;
+import org.jboss.tools.jst.jsp.text.xpl.IStructuredTextOccurrenceStructureProvider;
+import org.jboss.tools.jst.jsp.text.xpl.StructuredTextOccurrenceStructureProviderRegistry;
+import org.jboss.tools.jst.jsp.ui.action.ExtendedFormatAction;
+import org.jboss.tools.jst.jsp.ui.action.IExtendedAction;
+import org.jboss.tools.jst.web.tld.VpeTaglibManager;
+import org.jboss.tools.jst.web.tld.VpeTaglibManagerProvider;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+/**
+ * @author Jeremy
+ *
+ */
+public class JSPTextEditor extends StructuredTextEditor implements
+ ITextListener, IJSPTextEditor, ITextFormatter,
+ IOccurrencePreferenceProvider {
+ private IStructuredTextOccurrenceStructureProvider fOccurrenceModelUpdater;
+
+ TextEditorDrop dnd = new TextEditorDrop();
+
+ JSPMultiPageEditor parentEditor;
+
+ long timeStamp = -1;
+
+ long savedTimeStamp = -1;
+
+ IVisualController vpeController;
+ //Added By Max Areshkau
+ //Fix for JBIDE-788
+ protected SourceEditorPageContext pageContext = null;
+
+ public JSPTextEditor(JSPMultiPageEditor parentEditor) {
+ JspEditorPlugin.getDefault().initDefaultPluginPreferences();
+ dnd.setTextEditorDropProvider(new TextEditorDropProviderImpl());
+ this.parentEditor = parentEditor;
+ super
+ .setSourceViewerConfiguration(new ExtendedStructuredTextViewerConfigurationJSP());
+ }
+
+ protected void setSourceViewerConfiguration(SourceViewerConfiguration config) {
+ if (config instanceof StructuredTextViewerConfigurationJSP) {
+ if (!(config instanceof ExtendedStructuredTextViewerConfigurationJSP)) {
+ config = new ExtendedStructuredTextViewerConfigurationJSP();
+ }
+ } else if (config instanceof StructuredTextViewerConfigurationHTML) {
+ if (!(config instanceof ExtendedStructuredTextViewerConfigurationHTML)) {
+ config = new ExtendedStructuredTextViewerConfigurationHTML();
+ }
+ } else {
+ config = new ExtendedStructuredTextViewerConfigurationJSP();
+ }
+ super.setSourceViewerConfiguration(config);
+ }
+
+ /** This is *only* for allowing unit tests to access the source configuration. */
+ public SourceViewerConfiguration getSourceViewerConfigurationForTest () {
+ return getSourceViewerConfiguration();
+ }
+ //Added By Max Areshkau
+ //Fix for JBIDE-788
+ public IVisualContext getPageContext() {
+
+ if (pageContext==null) {
+ pageContext = new SourceEditorPageContext();
+ }
+ // IDocument document = getTextViewer().getDocument();
+ // pageContext.setDocument(document);
+ IDOMDocument document = ((DOMModelImpl) getModel()).getDocument();
+ pageContext.setDocument(document);
+ return pageContext;
+ }
+
+ protected void initializeDrop(ITextViewer textViewer) {
+
+ Composite c = textViewer.getTextWidget();
+ Label l = new Label(c, SWT.NONE);
+ l.dispose();
+ }
+
+ private ConfigurableContentOutlinePage fOutlinePage = null;
+
+ private OutlinePageListener fOutlinePageListener = null;
+
+ private IPropertySheetPage fPropertySheetPage;
+
+ public Object getAdapter(Class adapter) {
+ if (ISourceViewer.class.equals(adapter)) {
+ return JSPTextEditor.this.getSourceViewer();
+ } else if (IContentOutlinePage.class.equals(adapter)) {
+ if (fOutlinePage == null || fOutlinePage.getControl() == null
+ || fOutlinePage.getControl().isDisposed()) {
+ IStructuredModel internalModel = getModel();
+ ContentOutlineConfiguration cfg = new JSPContentOutlineConfiguration(
+ this);
+ if (cfg != null) {
+ ConfigurableContentOutlinePage outlinePage = new ConfigurableContentOutlinePage();
+ outlinePage.setConfiguration(cfg);
+ if (internalModel != null) {
+ outlinePage.setInputContentTypeIdentifier(internalModel
+ .getContentTypeIdentifier());
+ outlinePage.setInput(internalModel);
+ }
+
+ if (fOutlinePageListener == null) {
+ fOutlinePageListener = new OutlinePageListener();
+ }
+
+ outlinePage
+ .addSelectionChangedListener(fOutlinePageListener);
+ outlinePage.addDoubleClickListener(fOutlinePageListener);
+
+ fOutlinePage = outlinePage;
+ }
+ }
+ return fOutlinePage;
+ } else if (IPropertySheetPage.class == adapter) {
+ if (fPropertySheetPage == null
+ || fPropertySheetPage.getControl() == null
+ || fPropertySheetPage.getControl().isDisposed()) {
+ JSPPropertySheetConfiguration cfg = new JSPPropertySheetConfiguration();
+ if (cfg != null) {
+ ConfigurablePropertySheetPage propertySheetPage = new ConfigurablePropertySheetPage();
+ propertySheetPage.setConfiguration(cfg);
+ fPropertySheetPage = propertySheetPage;
+ setSorter(cfg.getSorter(), propertySheetPage);
+ }
+ }
+ return fPropertySheetPage;
+ }
+ return super.getAdapter(adapter);
+ }
+
+ private void setSorter(PropertySheetSorter sorter,
+ ConfigurablePropertySheetPage sheet) {
+ try {
+ Method method = PropertySheetPage.class.getDeclaredMethod(
+ "setSorter", new Class[] { PropertySheetSorter.class });
+ method.setAccessible(true);
+ method.invoke(sheet, new Object[] { sorter });
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public String getEditorId() {
+ return JSPUIPlugin.ID;
+ }
+
+ public IStructuredTextOccurrenceStructureProvider getOccurrencePreferenceProvider() {
+ return fOccurrenceModelUpdater;
+ }
+
+ public void createPartControl(Composite parent) {
+ super.createPartControl(parent);
+
+ StructuredTextOccurrenceStructureProviderRegistry registry = XmlEditorPlugin
+ .getDefault().getOccurrenceStructureProviderRegistry(
+ JspEditorPlugin.PLUGIN_ID);
+ fOccurrenceModelUpdater = registry
+ .getCurrentOccurrenceProvider(JspEditorPlugin.PLUGIN_ID);
+
+ if (fOccurrenceModelUpdater != null)
+ fOccurrenceModelUpdater.install(this, getTextViewer());
+
+ installActivePropmtSupport();
+
+ createDrop();
+ setModified(false);
+ getSourceViewer().removeTextListener(this);
+ getSourceViewer().addTextListener(this);
+
+ Object dtid = getSourceViewer().getTextWidget().getData("DropTarget");
+ if (dtid != null) {
+ if (dtid instanceof DropTarget) {
+ DropTarget dropTarget = (DropTarget) dtid;
+ dropTarget.addDropListener(new DropTargetAdapter() {
+ private FreeCaretStyledText getFreeCaretControl(
+ Object sourceOrTarget) {
+ if (sourceOrTarget == null)
+ return null;
+
+ Object control = null;
+
+ if (sourceOrTarget instanceof DropTarget) {
+ control = ((DropTarget) sourceOrTarget)
+ .getControl();
+ } else if (sourceOrTarget instanceof DragSource) {
+ control = ((DragSource) sourceOrTarget)
+ .getControl();
+ } else
+ return null;
+
+ if (control instanceof FreeCaretStyledText)
+ return (FreeCaretStyledText) control;
+ return null;
+ }
+
+ private int getPosition(StyledText t, int x, int y) {
+ try {
+ Point pp = t.toControl(x, y);
+ x = pp.x;
+ y = pp.y;
+ int lineIndex = (t.getTopPixel() + y)
+ / t.getLineHeight();
+ if (lineIndex >= t.getLineCount()) {
+ return t.getCharCount();
+ } else {
+ int c = 0;
+ try {
+ c = t.getOffsetAtLocation(new Point(x, y));
+ if (c < 0)
+ c = 0;
+ } catch (Exception ex) {
+ c = t.getOffsetAtLine(lineIndex + 1)
+ - (t.getLineDelimiter() == null ? 0
+ : t.getLineDelimiter()
+ .length());
+ }
+ return c;
+ }
+ } catch (Exception e) {
+ return 0;
+ }
+ }
+
+ public void dragEnter(DropTargetEvent event) {
+ getFreeCaretControl(event.widget).enableFreeCaret(true);
+ }
+
+ public void dragLeave(DropTargetEvent event) {
+ getFreeCaretControl(event.widget).enableFreeCaret(false);
+ }
+
+ public void dragOperationChanged(DropTargetEvent event) {
+ getFreeCaretControl(event.widget).enableFreeCaret(false);
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ FreeCaretStyledText fcst = getFreeCaretControl(event.widget);
+ int pos = getPosition(fcst, event.x, event.y);
+ Point p = fcst.getLocationAtOffset(pos);
+ fcst.myRedraw(p.x, p.y);
+ }
+
+ public void drop(DropTargetEvent event) {
+ getFreeCaretControl(event.widget).enableFreeCaret(false);
+ }
+ });
+ }
+ }
+ }
+
+ protected ISourceViewer createSourceViewer(Composite parent,
+ IVerticalRuler ruler, int styles) {
+ ISourceViewer sv = super.createSourceViewer(parent, ruler, styles);
+ sv.getTextWidget().addFocusListener(new TextFocusListener());
+ return sv;
+ }
+
+ protected StructuredTextViewer createStructedTextViewer(Composite parent,
+ IVerticalRuler verticalRuler, int styles) {
+ return new JSPStructuredTextViewer(parent, verticalRuler,
+ getOverviewRuler(), isOverviewRulerVisible(), styles,
+ parentEditor, this);
+ }
+
+ class TextFocusListener extends FocusAdapter {
+ public void focusLost(FocusEvent e) {
+ if (JSPTextEditor.super.isDirty()) {
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ try {
+ Thread.sleep(200);
+ } catch (InterruptedException exc) {
+ JspEditorPlugin.getPluginLog().logError(exc);
+ }
+ save();
+ }
+ });
+ }
+ }
+ }
+
+ public void save() {
+ if (!lock && isModified()) {
+ lock = true;
+ try {
+ FileAnyImpl f = (FileAnyImpl) getModelObject();
+ if (f != null)
+ f.edit(getSourceViewer().getDocument().get());
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ } finally {
+ setModified(false);
+ lock = false;
+ }
+ }
+ }
+
+ boolean modified = false;
+
+ public void setModified(boolean set) {
+ if (this.modified != set) {
+ this.modified = set;
+ if (set) {
+ XModelObject o = getModelObject();
+ if (o != null)
+ o.setModified(true);
+ }
+ super.firePropertyChange(IEditorPart.PROP_DIRTY);
+ }
+ }
+
+ public void updateModification() {
+ //added by Max Areshkau
+ //Fix for JBIDE-788
+ getPageContext().refreshBundleValues();
+
+ XModelObject object = getModelObject();
+ if (object != null && !object.isModified() && isModified()) {
+ setModified(false);
+ } else {
+ firePropertyChange(ITextEditor.PROP_DIRTY);
+ }
+ }
+
+ public boolean isModified() {
+ return modified;
+ }
+
+ protected void doSetInput(IEditorInput input) throws CoreException {
+ super.doSetInput(XModelObjectEditorInput.checkInput(input));
+ if (getSourceViewer() != null
+ && getSourceViewer().getDocument() != null) {
+ getSourceViewer().removeTextListener(this);
+ getSourceViewer().addTextListener(this);
+ }
+ if (listener != null)
+ listener.dispose();
+ listener = null;
+ XModelObject o = getModelObject();
+ if (o instanceof FileAnyImpl) {
+ listener = new BodyListenerImpl((FileAnyImpl) o);
+ }
+ }
+
+ boolean lock = false;
+
+ public boolean isDirty() {
+ if (getEditorInput() instanceof IModelObjectEditorInput) {
+ XModelObject o = getModelObject();
+ if (o != null && o.isModified())
+ return true;
+ else {
+ return isModified();
+ }
+ } else {
+ return super.isDirty();
+ }
+ }
+
+ public void doSave(IProgressMonitor monitor) {
+ XModelObject o = getModelObject();
+ super.doSave(monitor);
+ if (o != null && (monitor == null || !monitor.isCanceled())) {
+ if (o != null)
+ save();
+ if (getEditorInput() instanceof ILocationProvider) {
+ XModelObject p = o.getParent();
+ if (p instanceof FolderImpl) {
+ ((FolderImpl) p).saveChild(o);
+ }
+ } else {
+ o.setModified(false);
+ XModelObjectLoaderUtil.updateModifiedOnSave(o);
+ }
+ super.firePropertyChange(IEditorPart.PROP_DIRTY);
+ }
+ }
+
+ public void firePropertyChangeDirty() {
+ super.firePropertyChange(IEditorPart.PROP_DIRTY);
+ }
+
+ public XModelObject getModelObject() {
+ if (getEditorInput() instanceof IModelObjectEditorInput) {
+ return ((IModelObjectEditorInput) getEditorInput())
+ .getXModelObject();
+ }
+ return null;
+ }
+
+ class TextEditorDropProviderImpl implements TextEditorDropProvider {
+
+ public ISourceViewer getSourceViewer() {
+ return JSPTextEditor.this.getSourceViewer();
+ }
+
+ public XModelObject getModelObject() {
+ return JSPTextEditor.this.getModelObject();
+ }
+
+ public void insert(Properties p) {
+ PaletteInsertHelper.insertIntoEditor(getSourceViewer(), p);
+ }
+
+ }
+
+ public void textChanged(TextEvent event) {
+ if (event.getDocumentEvent() != null) {
+ setModified(true);
+ }
+ }
+
+ public void doRevertToSaved() {
+ save();
+ XModelObject o = getModelObject();
+ if (o == null) {
+ super.doRevertToSaved();
+ return;
+ }
+ Properties p = new Properties();
+ XActionInvoker.invoke("DiscardActions.Discard", o, p);
+ if (!"true".equals(p.getProperty("done")))
+ return;
+ super.doRevertToSaved();
+ if (o.isModified())
+ o.setModified(false);
+ modified = false;
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+ updatePartControl(getEditorInput());
+ }
+
+ public IAnnotationModel getAnnotationModel() {
+ return getSourceViewer().getAnnotationModel();
+ }
+
+ private WTPTextJspKbConnector wtpTextJspKbConnector;
+
+ private void installActivePropmtSupport() {
+ try {
+ IDocument document = getTextViewer().getDocument();
+ IStructuredModel model = null;
+ if (getDocumentProvider() instanceof IModelProvider) {
+ model = ((IModelProvider) getDocumentProvider())
+ .getModel(getEditorInput());
+ } else {
+ if (document instanceof IStructuredDocument) {
+ model = getModel();
+ }
+ }
+ if (wtpTextJspKbConnector == null
+ && model != null
+ && (getContentType().toLowerCase().indexOf("jsp") != -1 || getContentType()
+ .toLowerCase().indexOf("html") != -1)) {
+ wtpTextJspKbConnector = new WTPTextJspKbConnector(
+ getEditorInput(), document, model);
+ wtpTextJspKbConnector.setTaglibManagerProvider(parentEditor);
+ }
+ } catch (Exception x) {
+ JspEditorPlugin.getPluginLog().logError("Error while installing active prpmpting support", x);
+ }
+ }
+
+ private String getContentType() {
+ String type = null;
+ try {
+ type = getModel().getContentTypeIdentifier();
+ } finally {
+ if (type == null)
+ type = "";
+ }
+ return type;
+ }
+
+ public WTPTextJspKbConnector getWTPTextJspKbConnector() {
+ return wtpTextJspKbConnector;
+ }
+
+ public static class JSPStructuredTextViewer extends StructuredTextViewer
+ implements VpeTaglibManagerProvider, IIgnoreSelection {
+
+ boolean insertFromPallete = false;
+
+ private VpeTaglibManagerProvider provider;
+
+ private JSPTextEditor editor;
+
+ private boolean ignore = false;
+
+ public JSPStructuredTextViewer(Composite parent,
+ IVerticalRuler verticalRuler, int styles) {
+ super(parent, verticalRuler, null, false, styles);
+ }
+
+ public JSPStructuredTextViewer(Composite parent,
+ IVerticalRuler verticalRuler, IOverviewRuler overviewRuler,
+ boolean showAnnotationsOverview, int styles,
+ VpeTaglibManagerProvider provider, JSPTextEditor editor) {
+ super(parent, verticalRuler, overviewRuler,
+ showAnnotationsOverview, styles);
+ this.provider = provider;
+ this.editor = editor;
+ }
+
+ protected StyledText createTextWidget(Composite parent, int styles) {
+ return new FreeCaretStyledText(parent, styles);
+ }
+
+ public VpeTaglibManager getTaglibManager() {
+ //added by Max Areshkau
+ //Fix for JBIDE-788
+ if (getEditor() != null) {
+ if(getEditor().getPageContext() instanceof VpeTaglibManager)
+
+ return (VpeTaglibManager)getEditor().getPageContext();
+ }
+ return null;
+ }
+
+ public boolean doesIgnore() {
+ return ignore;
+ }
+
+ public void setIgnore(boolean ignore) {
+ this.ignore = ignore;
+ }
+
+ public void doOperation(int operation) {
+ if (operation == UNDO || operation == REDO
+ || operation == FORMAT_DOCUMENT
+ || operation == FORMAT_ACTIVE_ELEMENTS) {
+ if (editor.getVPEController() != null) {
+ editor.getVPEController().preLongOperation();
+ }
+ }
+
+ super.doOperation(operation);
+
+ if (operation == UNDO || operation == REDO
+ || operation == FORMAT_DOCUMENT
+ || operation == FORMAT_ACTIVE_ELEMENTS) {
+ if (editor.getVPEController() != null) {
+ editor.getVPEController().postLongOperation();
+ }
+ }
+ }
+
+ protected void handleDispose() {
+ if (editor != null && editor.getSourceViewer() != null && editor.getSourceViewer().getTextWidget() != null && editor.getVPEController() != null) {
+ StyledText widget = editor.getSourceViewer().getTextWidget();
+ widget.removeSelectionListener(editor.getVPEController());
+ }
+ super.handleDispose();
+ }
+
+
+ /**
+ * @return the editor
+ */
+ //Added By Max Areshkau
+ //Fix for JBIDE-788
+ public JSPTextEditor getEditor() {
+ return editor;
+ }
+
+ /**
+ * @param editor the editor to set
+ */
+ //Added By Max Areshkau
+ //Fix for JBIDE-788
+ public void setEditor(JSPTextEditor editor) {
+ this.editor = editor;
+ }
+
+ }
+ public JSPMultiPageEditor getParentEditor() {
+ return parentEditor;
+ }
+
+ public void setVPEController(IVisualController c) {
+ vpeController = c;
+ }
+
+ public IVisualController getVPEController() {
+ return vpeController;
+ }
+
+ public void runDropCommand(final String flavor, final String data) {
+ XModelBuffer b = XModelTransferBuffer.getInstance().getBuffer();
+ final XModelObject o = b == null ? null : b.source();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if (parentEditor.getVisualEditor().getController() != null) {
+ if(o != null && !XModelTransferBuffer.getInstance().isEnabled()) {
+ XModelTransferBuffer.getInstance().enable();
+ XModelTransferBuffer.getInstance().getBuffer().addSource(o);
+ }
+ try {
+ DropData dropData = new DropData(flavor,
+ data,
+ getEditorInput(), getSourceViewer(),
+ getSelectionProvider());
+ dropData.setAttributeName(dropContext.getAttributeName());
+ IDropCommand dropCommand = DropCommandFactory.getInstance().getDropCommand(flavor, JSPTagProposalFactory.getInstance());
+
+ boolean promptAttributes = "yes".equals(VpePreference.ALWAYS_REQUEST_FOR_ATTRIBUTE.getValue());
+ dropCommand.getDefaultModel().setPromptForTagAttributesRequired(promptAttributes);
+ dropCommand.execute(dropData);
+ } finally {
+ XModelTransferBuffer.getInstance().disable();
+ }
+ }
+ }
+ });
+ }
+
+ private void createDrop() {
+ DropTarget target = new DropTarget(getSourceViewer().getTextWidget(),
+ DND.DROP_MOVE | DND.DROP_COPY);
+ Transfer[] types = new Transfer[] { ModelTransfer.getInstance(),
+ HTMLTransfer.getInstance(), TextTransfer.getInstance(),
+ FileTransfer.getInstance() };
+ target.setTransfer(types);
+ target.addDropListener(new DTL());
+ }
+
+ DropContext dropContext = new DropContext();
+
+ class DTL implements DropTargetListener {
+ int lastpos = -1;
+
+ int lastdetail = -1;
+
+ public void dragEnter(DropTargetEvent event) {
+ lastpos = -1;
+ }
+
+ public void dragLeave(DropTargetEvent event) {
+ lastpos = -1;
+ }
+
+ public void dragOperationChanged(DropTargetEvent event) {
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ if (!isEditable()
+ || (getModelObject() != null && !getModelObject()
+ .isObjectEditable())) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ dropContext.setDropTargetEvent(event);
+ if (dropContext.getFlavor() == null) {
+ event.detail = DND.DROP_NONE;
+ return;
+ }
+ // Drop from VPE to Source is forbidden
+ if (dropContext.getFlavor().equals("text/html")) {
+ if (InnerDragBuffer.object != null) {
+ event.detail = DND.DROP_NONE;
+ }
+ return;
+ }
+ int pos = getPosition(event.x, event.y);
+ if (lastpos == pos && pos >= 0) {
+ pos = lastpos;
+ event.detail = lastdetail;
+ return;
+ }
+ lastpos = pos;
+ dropContext.clean();
+ getSourceViewer().getDocument();
+ IndexedRegion region = getModel().getIndexedRegion(pos);
+ if (region instanceof ElementImpl) {
+ ElementImpl jspElement = (ElementImpl) region;
+ NamedNodeMap attributes = jspElement.getAttributes();
+ if (pos == jspElement.getStartOffset()
+ || pos == jspElement.getEndStartOffset()) {
+ event.detail = lastdetail = DND.DROP_MOVE;
+ return;
+ }
+ for (int i = 0; i < attributes.getLength(); i++) {
+ Node attribute = attributes.item(i);
+ if (attribute instanceof AttrImpl) {
+ AttrImpl jspAttr = (AttrImpl) attribute;
+ ITextRegion valueRegion = jspAttr.getValueRegion();
+ if (valueRegion == null) {
+ event.detail = lastdetail = DND.DROP_NONE;
+ return;
+ }
+ int startPos = jspElement.getStartOffset()
+ + valueRegion.getStart();
+ int endPos = jspElement.getStartOffset()
+ + valueRegion.getTextEnd();
+ if (pos > startPos && pos < endPos) {
+ dropContext.setOverAttributeValue(true);
+ dropContext.setAttributeName(jspAttr.getNodeName());
+ event.detail = lastdetail = DND.DROP_MOVE;
+ return;
+ }
+ }
+ }
+ event.detail = lastdetail = DND.DROP_NONE;
+ } else if (region instanceof Text
+ && isInsideResponseRedirect((Text) region, pos
+ - region.getStartOffset())) {
+ dropContext.setOverAttributeValue(true);
+ event.detail = lastdetail = DND.DROP_MOVE;
+ } else if (region instanceof Text) {
+ event.detail = lastdetail = DND.DROP_MOVE;
+ } else if (region instanceof DocumentType) {
+ event.detail = lastdetail = DND.DROP_NONE;
+ } else if (region == null) {
+ //new place
+ event.detail = lastdetail = DND.DROP_MOVE;
+ }
+ }
+
+ public void drop(DropTargetEvent event) {
+ int offset = getPosition(event.x, event.y);
+ selectAndReveal(offset, 0);
+ dropContext.runDropCommand(JSPTextEditor.this, event);
+ }
+
+ public void dropAccept(DropTargetEvent event) {
+ }
+
+ }
+
+ private int getPosition(int x, int y) {
+ try {
+ ISourceViewer v = getSourceViewer();
+ StyledText t = v.getTextWidget();
+ Point pp = t.toControl(x, y);
+ x = pp.x;
+ y = pp.y;
+ int lineIndex = (t.getTopPixel() + y) / t.getLineHeight();
+ if (lineIndex >= t.getLineCount()) {
+ return t.getCharCount();
+ } else {
+ int c = 0;
+ try {
+ c = t.getOffsetAtLocation(new Point(x, y));
+ if (c < 0)
+ c = 0;
+ } catch (Exception ex) {
+ c = t.getOffsetAtLine(lineIndex + 1)
+ - (t.getLineDelimiter() == null ? 0 : t
+ .getLineDelimiter().length());
+ }
+ return c;
+ }
+ } catch (Exception e) {
+ return 0;
+ }
+ }
+
+ public String[] getConfigurationPoints() {
+ String contentTypeIdentifierID = null;
+ if (getModel() != null)
+ contentTypeIdentifierID = getModel().getContentTypeIdentifier();
+ return ConfigurationPointCalculator.getConfigurationPoints(this,
+ contentTypeIdentifierID, ConfigurationPointCalculator.SOURCE,
+ StructuredTextEditor.class);
+ }
+
+ public void formatTextRegion(IDocument document, IRegion region) {
+ SourceViewerConfiguration conf = getSourceViewerConfiguration();
+
+ if (conf instanceof StructuredTextViewerConfiguration) {
+ StructuredTextViewerConfiguration stvc = (StructuredTextViewerConfiguration) conf;
+ IContentFormatter f = stvc.getContentFormatter(getSourceViewer());
+ f.format(document, region);
+ }
+ }
+
+ Point storedSelection = new Point(0, 0);
+
+ protected void handleCursorPositionChanged() {
+ super.handleCursorPositionChanged();
+ ISelection selection = getSelectionProvider().getSelection();
+ Point p = getTextViewer().getTextWidget().getSelection();
+ if (storedSelection == null || !storedSelection.equals(p)) {
+ storedSelection = p;
+ if (selection instanceof ITextSelection) {
+ ITextSelection ts = (ITextSelection) selection;
+ if (ts.getLength() == 0) {
+ if (vpeController != null) {
+ vpeController
+ .selectionChanged(new SelectionChangedEvent(
+ getSelectionProvider(),
+ getSelectionProvider().getSelection()));
+ }
+ }
+ }
+ }
+ }
+
+ static int firingSelectionFailedCount = 0;
+
+ private class OutlinePageListener implements IDoubleClickListener,
+ ISelectionChangedListener {
+ public void doubleClick(DoubleClickEvent event) {
+ if (event.getSelection().isEmpty())
+ return;
+
+ int start = -1;
+ int length = 0;
+ if (event.getSelection() instanceof IStructuredSelection) {
+ ISelection currentSelection = getSelectionProvider()
+ .getSelection();
+ if (currentSelection instanceof IStructuredSelection) {
+ Object current = ((IStructuredSelection) currentSelection)
+ .toArray();
+ Object newSelection = ((IStructuredSelection) event
+ .getSelection()).toArray();
+ if (!current.equals(newSelection)) {
+ IStructuredSelection selection = (IStructuredSelection) event
+ .getSelection();
+ Object o = selection.getFirstElement();
+ if (o instanceof IndexedRegion) {
+ start = ((IndexedRegion) o).getStartOffset();
+ length = ((IndexedRegion) o).getEndOffset() - start;
+ } else if (o instanceof ITextRegion) {
+ start = ((ITextRegion) o).getStart();
+ length = ((ITextRegion) o).getEnd() - start;
+ } else if (o instanceof IRegion) {
+ start = ((ITextRegion) o).getStart();
+ length = ((ITextRegion) o).getLength();
+ }
+ }
+ }
+ } else if (event.getSelection() instanceof ITextSelection) {
+ start = ((ITextSelection) event.getSelection()).getOffset();
+ length = ((ITextSelection) event.getSelection()).getLength();
+ }
+ if (start > -1) {
+ getSourceViewer().setRangeIndication(start, length, false);
+ selectAndReveal(start, length);
+ }
+ }
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (event.getSelection().isEmpty() || isFiringSelection())
+ return;
+
+ boolean ignoreSelection = false;
+ if (getSourceViewer() != null
+ && getSourceViewer() instanceof IIgnoreSelection) {
+ IIgnoreSelection is = ((IIgnoreSelection) getSourceViewer());
+ ignoreSelection = is.doesIgnore();
+ }
+ if (getSourceViewer() != null
+ && getSourceViewer().getTextWidget() != null
+ && !getSourceViewer().getTextWidget().isDisposed()
+ && !getSourceViewer().getTextWidget().isFocusControl()
+ && !ignoreSelection) {
+ int start = -1;
+ int length = 0;
+ if (event.getSelection() instanceof IStructuredSelection) {
+ ISelection current = getSelectionProvider().getSelection();
+ if (current instanceof IStructuredSelection) {
+ Object[] currentSelection = ((IStructuredSelection) current)
+ .toArray();
+ Object[] newSelection = ((IStructuredSelection) event
+ .getSelection()).toArray();
+ if (!Arrays.equals(currentSelection, newSelection)) {
+ if (newSelection.length > 0) {
+ /*
+ * No ordering is guaranteed for multiple
+ * selection
+ */
+ Object o = newSelection[0];
+ if (o instanceof IndexedRegion) {
+ start = ((IndexedRegion) o)
+ .getStartOffset();
+ int end = ((IndexedRegion) o)
+ .getEndOffset();
+ if (newSelection.length > 1) {
+ for (int i = 1; i < newSelection.length; i++) {
+ start = Math
+ .min(
+ start,
+ ((IndexedRegion) newSelection[i])
+ .getStartOffset());
+ end = Math
+ .max(
+ end,
+ ((IndexedRegion) newSelection[i])
+ .getEndOffset());
+ }
+ length = end - start;
+ }
+ } else if (o instanceof ITextRegion) {
+ start = ((ITextRegion) o).getStart();
+ int end = ((ITextRegion) o).getEnd();
+ if (newSelection.length > 1) {
+ for (int i = 1; i < newSelection.length; i++) {
+ start = Math
+ .min(
+ start,
+ ((ITextRegion) newSelection[i])
+ .getStart());
+ end = Math
+ .max(
+ end,
+ ((ITextRegion) newSelection[i])
+ .getEnd());
+ }
+ length = end - start;
+ }
+ } else if (o instanceof IRegion) {
+ start = ((IRegion) o).getOffset();
+ int end = start + ((IRegion) o).getLength();
+ if (newSelection.length > 1) {
+ for (int i = 1; i < newSelection.length; i++) {
+ start = Math.min(start,
+ ((IRegion) newSelection[i])
+ .getOffset());
+ end = Math
+ .max(
+ end,
+ ((IRegion) newSelection[i])
+ .getOffset()
+ + ((IRegion) newSelection[i])
+ .getLength());
+ }
+ length = end - start;
+ }
+ }
+ }
+ }
+ }
+ } else if (event.getSelection() instanceof ITextSelection) {
+ start = ((ITextSelection) event.getSelection()).getOffset();
+ }
+ if (start > -1) {
+ updateRangeIndication0(event.getSelection());
+ selectAndReveal(start, length);
+ }
+ }
+ }
+
+ Method m = null;
+
+ private boolean isFiringSelection() {
+ if (getSelectionProvider() == null)
+ return false;
+ if (firingSelectionFailedCount > 0)
+ return false;
+ try {
+ if (m == null) {
+ Class c = getSelectionProvider().getClass();
+ m = c.getDeclaredMethod("isFiringSelection", new Class[0]);
+ m.setAccessible(true);
+ }
+ Boolean b = (Boolean) m.invoke(getSelectionProvider(),
+ new Object[0]);
+ return b.booleanValue();
+ } catch (Exception e) {
+ firingSelectionFailedCount++;
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ return false;
+ }
+ }
+
+ private void updateRangeIndication0(ISelection selection) {
+ if (selection instanceof IStructuredSelection
+ && !((IStructuredSelection) selection).isEmpty()) {
+ Object[] objects = ((IStructuredSelection) selection).toArray();
+ if (objects.length > 0) {
+ int start = ((IndexedRegion) objects[0]).getStartOffset();
+ int end = ((IndexedRegion) objects[objects.length - 1])
+ .getEndOffset();
+ getSourceViewer().setRangeIndication(start, end - start, false);
+ } else {
+ getSourceViewer().removeRangeIndication();
+ }
+ } else {
+ if (selection instanceof ITextSelection) {
+ getSourceViewer().setRangeIndication(
+ ((ITextSelection) selection).getOffset(),
+ ((ITextSelection) selection).getLength(), false);
+ } else {
+ getSourceViewer().removeRangeIndication();
+ }
+ }
+ }
+
+ protected IExtendedAction createExtendedAction(String actionID) {
+ if (StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT
+ .equals(actionID)
+ || ITextEditorActionConstants.UNDO.equals(actionID)
+ || ITextEditorActionConstants.REDO.equals(actionID)) {
+ return new ExtendedFormatAction(this, actionID);
+ }
+ return null;
+ }
+
+ protected void initializeEditor() {
+ super.initializeEditor();
+ getPreferenceStore();
+ }
+
+ public void dispose() {
// some things in the configuration need to clean
// up after themselves
getSourceViewer().removeTextListener(this);
@@ -1090,69 +1139,69 @@
}
fOutlinePage=null;
fOutlinePageListener=null;
- if (fOccurrenceModelUpdater != null) {
- fOccurrenceModelUpdater.uninstall();
- fOccurrenceModelUpdater = null;
- }
- super.dispose();
+ if (fOccurrenceModelUpdater != null) {
+ fOccurrenceModelUpdater.uninstall();
+ fOccurrenceModelUpdater = null;
+ }
+ super.dispose();
if (wtpTextJspKbConnector != null) {
wtpTextJspKbConnector.setTaglibManagerProvider(null);
wtpTextJspKbConnector = null;
}
- if (listener != null)
- listener.dispose();
- listener = null;
- }
-
- BodyListenerImpl listener = null;
-
- class BodyListenerImpl implements FileAnyImpl.BodyListener {
- FileAnyImpl file;
-
- BodyListenerImpl(FileAnyImpl file) {
- this.file = file;
- file.addListener(this);
- }
-
- public void bodyChanged(String body) {
- setText(body);
- }
-
- public void dispose() {
- file.removeListener(this);
- }
- }
-
- public void setText(String text) {
- if (getSourceViewer() == null
- || getSourceViewer().getDocument() == null)
- return;
- String txt = getSourceViewer().getDocument().get();
- if (txt != null && txt.length() > 0) {
- if (!TextMerge.replace(getSourceViewer().getDocument(), text)) {
- getSourceViewer().getDocument().set(text);
- }
- } else {
- getSourceViewer().getDocument().set(text);
- }
- }
-
- boolean isInsideResponseRedirect(Text textNode, int off) {
- if (off < 0)
- return false;
- String START = "response.sendRedirect(\"";
- String END = "\")";
- String text = textNode.getNodeValue();
- int i = 0;
- while (i < text.length() && i < off) {
- int i1 = text.indexOf(START, i);
- if (i1 < 0 || i1 + START.length() > off)
- return false;
- int i2 = text.indexOf(END, i1 + START.length());
- if (i2 < 0 || i2 >= off)
- return true;
- i = i2 + END.length();
- }
- return false;
- }
-}
+ if (listener != null)
+ listener.dispose();
+ listener = null;
+ }
+
+ BodyListenerImpl listener = null;
+
+ class BodyListenerImpl implements FileAnyImpl.BodyListener {
+ FileAnyImpl file;
+
+ BodyListenerImpl(FileAnyImpl file) {
+ this.file = file;
+ file.addListener(this);
+ }
+
+ public void bodyChanged(String body) {
+ setText(body);
+ }
+
+ public void dispose() {
+ file.removeListener(this);
+ }
+ }
+
+ public void setText(String text) {
+ if (getSourceViewer() == null
+ || getSourceViewer().getDocument() == null)
+ return;
+ String txt = getSourceViewer().getDocument().get();
+ if (txt != null && txt.length() > 0) {
+ if (!TextMerge.replace(getSourceViewer().getDocument(), text)) {
+ getSourceViewer().getDocument().set(text);
+ }
+ } else {
+ getSourceViewer().getDocument().set(text);
+ }
+ }
+
+ boolean isInsideResponseRedirect(Text textNode, int off) {
+ if (off < 0)
+ return false;
+ String START = "response.sendRedirect(\"";
+ String END = "\")";
+ String text = textNode.getNodeValue();
+ int i = 0;
+ while (i < text.length() && i < off) {
+ int i1 = text.indexOf(START, i);
+ if (i1 < 0 || i1 + START.length() > off)
+ return false;
+ int i2 = text.indexOf(END, i1 + START.length());
+ if (i2 < 0 || i2 >= off)
+ return true;
+ i = i2 + END.length();
+ }
+ return false;
+ }
+}
Deleted: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditorPageContext.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditorPageContext.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditorPageContext.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -1,299 +0,0 @@
-/*******************************************************************************
-
-* Copyright (c) 2007 Red Hat, Inc.
-* Distributed under license by Red Hat, Inc. All rights reserved.
-* This program is 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:
-* Red Hat, Inc. - initial API and implementation
-******************************************************************************/
-package org.jboss.tools.jst.jsp.jspeditor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
-import org.jboss.tools.common.kb.KbConnectorFactory;
-import org.jboss.tools.common.kb.KbConnectorType;
-import org.jboss.tools.common.kb.wtp.WtpKbConnector;
-import org.jboss.tools.jst.jsp.JspEditorPlugin;
-import org.jboss.tools.jst.jsp.editor.IVisualContext;
-import org.jboss.tools.jst.web.tld.TaglibData;
-import org.jboss.tools.jst.web.tld.VpeTaglibListener;
-import org.w3c.dom.Attr;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * @author Vitali (vyemialyanchyk(a)exadel.com)
- *
- * Class responsible to register TagLib data suitable for the current context
- */
-public class JSPTextEditorPageContext implements IVisualContext {
-
- protected ArrayList<TaglibData> taglibs = new ArrayList<TaglibData>();
- protected Map<String, String> taglibMap = new HashMap<String, String>();
- // this is just reference to VpeTemplateManager.templateTaglibs
- private Map<String,String> templateTaglibs = null;
- protected WtpKbConnector connector = null;
- //protected IDocument document = null;
- protected IDOMDocument document = null;
- protected Node referenceNode = null;
- protected int freeID = 0;
- protected ArrayList<VpeTaglibListener> taglibListeners = new ArrayList<VpeTaglibListener>();
-
- public JSPTextEditorPageContext() {
- // simple tests
- //addTaglib(123, "vitaliNewUri", "vitaliNewPrefix", true);
- //addTaglib(123, "http://java.sun.com/jsf/facelets", "1xmlns:ui11", true);
- //addTaglib(234, "http://java.sun.com/jsf/html", "2xmlns:ui22", true);
- //addTaglib(345, "http://richfaces.org/rich", "3xmlns:ui33", true);
- }
-
- public void clearAll() {
- taglibs.clear();
- taglibMap.clear();
- templateTaglibs = null;
- }
-
- public void dispose() {
- clearAll();
- connector = null;
- document = null;
- referenceNode = null;
- taglibListeners = null;
- }
-
- public void setReferenceNode(Node refNode) {
- if (referenceNode == refNode) {
- return;
- }
- referenceNode = refNode;
- updateTagLibs();
- }
-
- //public void setDocument(IDocument doc) {
- public void setDocument(IDOMDocument doc) {
- if (document == doc) {
- return;
- }
- document = doc;
- setReferenceNode(document);
- try {
- connector = (WtpKbConnector)KbConnectorFactory.getIntstance().createConnector(KbConnectorType.JSP_WTP_KB_CONNECTOR, document);
- } catch (InstantiationException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- } catch (IllegalAccessException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- } catch (ClassNotFoundException e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- updateTagLibs();
- }
-
- public boolean processAttribute(Attr attr, boolean bScopePrefix) {
- if (null == attr) {
- return false;
- }
- String startStr = "xmlns:";
- String name = attr.getName();
- if (!name.startsWith(startStr)) {
- return false;
- }
- name = name.substring(startStr.length());
- addTaglib(freeID++, attr.getValue(), name, true, bScopePrefix);
- return true;
- }
-
- public boolean processNode(Node node) {
- if (null == node) {
- return false;
- }
- String nodeName = node.getNodeName();
- // example: add some filter here
- //if (!"ui:composition".equalsIgnoreCase(nodeName)) {
- // return false;
- //}
- boolean bTestRes = false;
- NamedNodeMap attribList = node.getAttributes();
- if (null != attribList) {
- for (int i = 0; i < attribList.getLength(); i++) {
- Node tmp = attribList.item(i);
- bTestRes = processAttribute((Attr)tmp, false);
- }
- }
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node tmp = nodeList.item(i);
- bTestRes = processNode(tmp);
- }
- return true;
- }
-
- public void collectDocumentTagLibs() {
- if (null == document) {
- return;
- }
- NodeList nodeList = document.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node node = nodeList.item(i);
- processNode(node);
- }
- }
-
- public boolean processNodeUp(Node node) {
- if (null == node) {
- return false;
- }
- boolean bTestRes = false;
- NamedNodeMap attribList = node.getAttributes();
- if (null != attribList) {
- for (int i = 0; i < attribList.getLength(); i++) {
- Node tmp = attribList.item(i);
- bTestRes = processAttribute((Attr)tmp, true);
- }
- }
- bTestRes = processNodeUp(node.getParentNode());
- return true;
- }
-
- public void collectRefNodeTagLibs() {
- processNodeUp(referenceNode);
- }
-
- public void updateTagLibs() {
- taglibs.clear();
- freeID = 0;
- // collect all taglibs for the document - from top tree node to leafs
- //collectDocumentTagLibs();
- // collect all taglibs starting from reference node through its parents to the top node
- // parent's taglibs has lower priority then child taglibs
- collectRefNodeTagLibs();
- //
- for (Iterator<VpeTaglibListener> it = taglibListeners.iterator(); it.hasNext(); ) {
- it.next().taglibPrefixChanged(null);
- }
- rebuildTaglibMap();
- }
-
- private boolean rebuildTaglibMap() {
- taglibMap.clear();
- if (null == templateTaglibs) {
- return false;
- }
- Set<String> prefixSet = new HashSet<String>();
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- String prefix = taglib.getPrefix();
- if (!prefixSet.contains(prefix)) {
- String templatePrefix = templateTaglibs.get(taglib.getUri());
- if (templatePrefix != null) {
- taglibMap.put(prefix, templatePrefix);
- }
- prefixSet.add(prefix);
- }
- }
- return true;
- }
-
- /**
- * This is a way to use templateTaglibs from
- * org.jboss.tools.vpe.editor.template.VpeTemplateManager;
- * this is just reference to VpeTemplateManager.templateTaglibs
- * getter is prohibited here
- **/
- public void setTemplateTaglibs(Map<String,String> templateTaglibs) {
- this.templateTaglibs = templateTaglibs;
- rebuildTaglibMap();
- }
-
- /**
- * Return template taglib prefix using prefix as a key.
- * @return
- */
- public String getTemplateTaglibPrefix(String sourceTaglibPrefix) {
- return taglibMap.get(sourceTaglibPrefix);
- }
-
- // adds new tag library
- // removes tag library with id - if newUri or newPrefix is null
- public void addTaglib(int id, String newUri, String newPrefix, boolean ns, boolean bScopePrefix) {
- if (newUri == null || newPrefix == null) {
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- if (taglib.getId() == id) {
- taglibs.remove(i);
- break;
- }
- }
- return;
- }
- boolean bHasSame = false;
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- if (taglib.getId() == id) {
- if (!newUri.equals(taglib.getUri()) || !newPrefix.equals(taglib.getPrefix())) {
- taglibs.set(i, new TaglibData(id, newUri, newPrefix, ns));
- }
- return;
- }
- if (bScopePrefix && newPrefix.equals(taglib.getPrefix())) {
- return;
- }
- if (newUri.equals(taglib.getUri()) && newPrefix.equals(taglib.getPrefix()) && ns == taglib.isNs()) {
- bHasSame = true;
- break;
- }
- }
- if (!bHasSame) {
- taglibs.add(new TaglibData(id, newUri, newPrefix, ns));
- }
- }
-
- // implements IVisualContext
- public WtpKbConnector getConnector() {
- return connector;
- }
-
- // implements IVisualContext
- public void refreshBundleValues() {
- updateTagLibs();
- }
-
- // implements IVisualContext
- public List<TaglibData> getTagLibs() {
- List<TaglibData> clone = new ArrayList<TaglibData>();
- Iterator<TaglibData> iter = taglibs.iterator();
- while (iter.hasNext()) {
- TaglibData taglib = (TaglibData)iter.next();
- //if (!taglib.inList(clone)) {
- if (!clone.contains(taglib)) {
- clone.add(taglib);
- }
- }
- return clone;
- }
-
- // implements IVisualContext
- public void addTaglibListener(VpeTaglibListener listener) {
- if (taglibListeners.contains(listener)) {
- return;
- }
- taglibListeners.add(listener);
- }
-
- // implements IVisualContext
- public void removeTaglibListener(VpeTaglibListener listener) {
- taglibListeners.remove(listener);
- }
-
-}
Copied: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/SourceEditorPageContext.java (from rev 6148, trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditorPageContext.java)
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/SourceEditorPageContext.java (rev 0)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/SourceEditorPageContext.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -0,0 +1,162 @@
+/*******************************************************************************
+
+* Copyright (c) 2007 Red Hat, Inc.
+* Distributed under license by Red Hat, Inc. All rights reserved.
+* This program is 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:
+* Red Hat, Inc. - initial API and implementation
+******************************************************************************/
+package org.jboss.tools.jst.jsp.jspeditor;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.jboss.tools.common.kb.KbConnectorFactory;
+import org.jboss.tools.common.kb.KbConnectorType;
+import org.jboss.tools.common.kb.wtp.WtpKbConnector;
+import org.jboss.tools.jst.jsp.JspEditorPlugin;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.jst.jsp.util.XmlUtil;
+import org.jboss.tools.jst.web.tld.TaglibData;
+import org.jboss.tools.jst.web.tld.VpeTaglibListener;
+import org.jboss.tools.jst.web.tld.VpeTaglibManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Max Areshkau (mareshkau(a)exadel.com)
+ *
+ * Class responsible to register TagLib data suitable for the current context
+ */
+public class SourceEditorPageContext implements IVisualContext,VpeTaglibManager {
+
+ protected List<TaglibData> taglibs = null;
+
+ private WtpKbConnector connector = null;
+ private Node referenceNode = null;
+
+ public void clearAll() {
+
+ setTaglibs(null);
+ }
+
+ public void dispose() {
+ clearAll();
+ connector = null;
+ referenceNode = null;
+
+ }
+ /**
+ * Sets current node in scope of which we will be call context assistent
+ * @param refNode
+ */
+ public void setReferenceNode(Node refNode) {
+
+ if ((refNode==null)||(refNode.equals(referenceNode))) {
+ return;
+ }
+ referenceNode = refNode;
+ updateTagLibs();
+
+ }
+
+ public void setDocument(Document doc) {
+
+// setReferenceNode(doc);
+ try {
+ connector = (WtpKbConnector)KbConnectorFactory.getIntstance().createConnector(KbConnectorType.JSP_WTP_KB_CONNECTOR, doc);
+ } catch (InstantiationException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ } catch (IllegalAccessException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ } catch (ClassNotFoundException e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public void collectRefNodeTagLibs() {
+
+ if(referenceNode==null) {
+ return;
+ }
+
+ if(referenceNode.getNodeType()==Node.DOCUMENT_NODE) {
+ NodeList nodes =referenceNode.getChildNodes();
+
+ for(int i=0;i<nodes.getLength();i++) {
+ Node node =nodes.item(i);
+ List<TaglibData> result =XmlUtil.processNode(node);
+ if(result!=null&&result.size()>0) {
+ setTaglibs(result);
+ break;
+ }
+ }
+ } else {
+
+ setTaglibs(XmlUtil.processNode(referenceNode));
+ }
+ }
+
+ public void updateTagLibs() {
+ collectRefNodeTagLibs();
+ }
+
+
+
+ // implements IVisualContext
+ public WtpKbConnector getConnector() {
+ return connector;
+ }
+
+ // implements IVisualContext
+ public void refreshBundleValues() {
+ updateTagLibs();
+ }
+
+ // implements IVisualContext
+ public List<TaglibData> getTagLibs() {
+
+ List<TaglibData> clone = new ArrayList<TaglibData>();
+
+ Iterator<TaglibData> iter = getTaglibs() .iterator();
+ while (iter.hasNext()) {
+ TaglibData taglib = (TaglibData)iter.next();
+ if (!taglib.inList(clone)) {
+ clone.add(taglib);
+ }
+ }
+ return clone;
+ }
+
+ // implements IVisualContext
+ public void addTaglibListener(VpeTaglibListener listener) {
+ //just a stub
+ }
+
+ // implements IVisualContext
+ public void removeTaglibListener(VpeTaglibListener listener) {
+ //just a stub
+ }
+
+ /**
+ * @return the taglibs
+ */
+ private List<TaglibData> getTaglibs() {
+ if(taglibs==null) {
+ taglibs= new ArrayList<TaglibData>();
+ }
+ return taglibs;
+ }
+
+ /**
+ * @param taglibs the taglibs to set
+ */
+ private void setTaglibs(List<TaglibData> taglibs) {
+ this.taglibs = taglibs;
+ }
+
+}
Modified: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/ValueHelper.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/ValueHelper.java 2008-02-07 13:49:56 UTC (rev 6159)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/ValueHelper.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -96,11 +96,11 @@
IEditorPart editor = ModelUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if(!(editor instanceof JSPMultiPageEditor)) return false;
JSPTextEditor jspEditor = ((JSPMultiPageEditor)editor).getJspEditor();
- IVisualEditor v = ((JSPMultiPageEditor)editor).getVisualEditor();
- if(v == null) return false;
- IVisualController c = v.getController();
- if(c == null) return false;
- pageContext = c.getPageContext();
+
+ //Added By Max Areshkau
+ //Fix for JBIDE-788
+ pageContext = jspEditor.getPageContext();
+
editorInput = jspEditor.getEditorInput();
wtpTextJspKbConnector = jspEditor.getWTPTextJspKbConnector();
@@ -185,7 +185,13 @@
public VpeTaglibManager getTaglibManager() {
init();
- return pageContext;
+ if(pageContext!=null && pageContext instanceof VpeTaglibManager) {
+
+ return (VpeTaglibManager)pageContext;
+ } else {
+
+ return null;
+ }
}
public WtpKbConnector getPageConnector() {
Added: trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/util/XmlUtil.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/util/XmlUtil.java (rev 0)
+++ trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/util/XmlUtil.java 2008-02-07 13:50:07 UTC (rev 6160)
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.jst.jsp.util;
+
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.jboss.tools.jst.jsp.JspEditorPlugin;
+import org.jboss.tools.jst.web.tld.TaglibData;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+public class XmlUtil {
+
+ public static Element getDocumentElement(String xmlFileName) throws Exception {
+ FileInputStream inStream = null;
+ try {
+ inStream = new FileInputStream(xmlFileName);
+ InputSource inSource = new InputSource(inStream);
+ return getDocumentElement(inSource);
+ } finally {
+ try {
+ if (inStream != null) inStream.close();
+ } catch (Exception e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+ }
+
+ public static Element getDocumentElement(InputSource is) throws Exception {
+ return getDocument(is).getDocumentElement();
+ }
+
+ public static Document getDocument(InputSource is) throws Exception {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ return builder.parse(is);
+ }
+
+ public static void removeChildren(Node node) {
+ NodeList children = node.getChildNodes();
+ if (children != null) {
+ int len = children.getLength();
+ for (int i = len - 1; i >= 0; i--) {
+ node.removeChild(children.item(i));
+ }
+ }
+ }
+
+ /**
+ * Returns List of taglibs which are available for current node.
+ *
+ * @param node
+ * @return
+ */
+ public static List<TaglibData> processNode(Node node) {
+
+ List<TaglibData> taglibs = new ArrayList<TaglibData>();
+
+ if (node == null) {
+
+ return taglibs;
+ }
+
+ Node currentNode = node;
+ do {
+ NamedNodeMap attribList = currentNode.getAttributes();
+ if (null != attribList) {
+ for (int i = 0; i < attribList.getLength(); i++) {
+ Node tmp = attribList.item(i);
+ processAttribute(taglibs,(Attr)tmp, false);
+ }
+ }
+ currentNode = currentNode.getParentNode();
+
+ } while(currentNode!=null);
+
+ return taglibs;
+ }
+ /**
+ * Processes taglib attribute
+ * @param taglibs
+ * @param attr
+ * @param bScopePrefix
+ */
+ private static void processAttribute(List<TaglibData> taglibs, Attr attr, boolean bScopePrefix) {
+
+ String startStr = "xmlns:";
+ String name = attr.getName();
+ if (!name.startsWith(startStr)) {
+ return;
+ }
+ name = name.substring(startStr.length());
+ addTaglib(taglibs , attr.getValue(), name, true, bScopePrefix);
+ return;
+ }
+
+ /**
+ * Adds taglib to current taglibs
+ * @param taglibs
+ * @param newUri
+ * @param newPrefix
+ * @param ns
+ * @param bScopePrefix
+ */
+ private static void addTaglib(List<TaglibData> taglibs, String newUri, String newPrefix, boolean ns, boolean bScopePrefix) {
+ boolean bHasSame = false;
+ for (int i = 0; i < taglibs.size(); i++) {
+ TaglibData taglib = (TaglibData)taglibs.get(i);
+
+ if(newUri.equals(taglib.getUri())) {
+ return;
+ }
+ if(newPrefix.equals(taglib.getPrefix())) {
+ return;
+ }
+ }
+ if (!bHasSame) {
+ taglibs.add(new TaglibData(taglibs.size(), newUri, newPrefix, ns));
+ }
+ }
+ /**
+ * Returns Taglib data by prefix
+ *
+ * @param prefix
+ * @param taglibData
+ * @return
+ */
+ public static TaglibData getTaglibForPrefix(String prefix, List<TaglibData> taglibData){
+
+ for (TaglibData data : taglibData) {
+
+ if(data.getPrefix()!=null && data.getPrefix().equalsIgnoreCase(prefix)) {
+ return data;
+ }
+ }
+
+ return null;
+ }
+}
16 years, 4 months
JBoss Tools SVN: r6159 - in trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui: texteditors/xmleditor and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:49:56 -0500 (Thu, 07 Feb 2008)
New Revision: 6159
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DefaultDropCommandRunner.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DropData.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/PaletteDropCommand.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DefaultDropCommandRunner.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DefaultDropCommandRunner.java 2008-02-07 13:49:50 UTC (rev 6158)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DefaultDropCommandRunner.java 2008-02-07 13:49:56 UTC (rev 6159)
@@ -41,8 +41,6 @@
new DropData(
flavor,
data,
-/// parentEditor.getVisualEditor().getController().getPageContext(), ///getPageContext(),
- null,
ei,
sv,
sp
Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DropData.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DropData.java 2008-02-07 13:49:50 UTC (rev 6158)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/DropData.java 2008-02-07 13:49:56 UTC (rev 6159)
@@ -31,7 +31,6 @@
private IDropCommand fDropCommand = null;
private Node container = null;
private String attributeName = null;
- VpeTaglibManager pageContext = null;
/**
*
@@ -45,13 +44,12 @@
public DropData(
String mimeType,
String data,
- VpeTaglibManager pageContext,
IEditorInput input,
ISourceViewer viewer,
ISelectionProvider provider,
Node container
) {
- this(mimeType, data, pageContext, input, viewer, provider);
+ this(mimeType, data, input, viewer, provider);
this.container = container;
}
@@ -67,7 +65,6 @@
public DropData(
String mimeType,
String data,
- VpeTaglibManager pageContext,
IEditorInput input,
ISourceViewer viewer,
ISelectionProvider provider
@@ -77,7 +74,7 @@
fInput = input;
fViewer = viewer;
fProvider = provider;
- this.pageContext = pageContext;
+// this.pageContext = pageContext;
}
public void setAttributeName(String n) {
@@ -175,8 +172,4 @@
public Node getContainer() {
return container;
}
-
- public VpeTaglibManager getPageContext() {
- return pageContext;
- }
}
Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/PaletteDropCommand.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/PaletteDropCommand.java 2008-02-07 13:49:50 UTC (rev 6158)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/PaletteDropCommand.java 2008-02-07 13:49:56 UTC (rev 6159)
@@ -133,9 +133,10 @@
properties.setProperty("isDrop", "true");
properties.setProperty("actionSourceGUIComponentID", "editor");
properties.setProperty("accepsAsString", "true");
- if(getDefaultModel().getDropData().getPageContext() != null) {
- properties.put("taglibs", getDefaultModel().getDropData().getPageContext());
- }
+ //TODO Max Areshkau JBIDE-788
+// if(getDefaultModel().getDropData().getPageContext() != null) {
+// properties.put("taglibs", getDefaultModel().getDropData().getPageContext());
+// }
if(f != null) {
properties.put("file", f);
}
Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2008-02-07 13:49:50 UTC (rev 6158)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2008-02-07 13:49:56 UTC (rev 6159)
@@ -628,7 +628,6 @@
new DropData(
flavor,
data,
- null, ///getPageContext(),
getEditorInput(),
getSourceViewer(),
getSelectionProvider()
16 years, 4 months
JBoss Tools SVN: r6158 - trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:49:50 -0500 (Thu, 07 Feb 2008)
New Revision: 6158
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesDataDefinitionListTemplate.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesDataDefinitionListTemplate.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesDataDefinitionListTemplate.java 2008-02-07 13:49:45 UTC (rev 6157)
+++ trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesDataDefinitionListTemplate.java 2008-02-07 13:49:50 UTC (rev 6158)
@@ -88,7 +88,8 @@
}
el = (Element) tempNode;
if (el.getLocalName().equals(FACET_DEFINITION)
- && pageContext.getSourceTaglibUri(el).equals(FACET_URI)
+ //TODO Max Areshkau JBIDE-788 Deal with it
+// && pageContext.getSourceTaglibUri(el).equals(FACET_URI)
&& el.getAttribute(FACET_NAME_ATTR) != null
&& el.getAttribute(FACET_NAME_ATTR).equals(
FACET_NAME_ATTR_VALUE)) {
16 years, 4 months
JBoss Tools SVN: r6157 - in trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb: wtp and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:49:45 -0500 (Thu, 07 Feb 2008)
New Revision: 6157
Modified:
trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/KbConnector.java
trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/wtp/JspWtpKbConnector.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/KbConnector.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/KbConnector.java 2008-02-07 13:49:38 UTC (rev 6156)
+++ trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/KbConnector.java 2008-02-07 13:49:45 UTC (rev 6157)
@@ -23,7 +23,7 @@
* @return
* @throws KbException
*/
- public Collection getProposals(String query) throws KbException;
+ public Collection<?> getProposals(String query) throws KbException;
/**
*
Modified: trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/wtp/JspWtpKbConnector.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/wtp/JspWtpKbConnector.java 2008-02-07 13:49:38 UTC (rev 6156)
+++ trunk/common/plugins/org.jboss.tools.common.kb/src/org/jboss/tools/common/kb/wtp/JspWtpKbConnector.java 2008-02-07 13:49:45 UTC (rev 6157)
@@ -214,7 +214,7 @@
* @throws KbException
* @see org.jboss.tools.common.kb.KbConnector#getProposals()
*/
- public Collection getProposals(String query) throws KbException {
+ public Collection<KbProposal> getProposals(String query) throws KbException {
boolean emptyQuery = false;
if(query.equals("/")) {
emptyQuery = true;
16 years, 4 months
JBoss Tools SVN: r6156 - trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/jst/web/tld.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:49:38 -0500 (Thu, 07 Feb 2008)
New Revision: 6156
Modified:
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/jst/web/tld/VpeTaglibManager.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/jst/web/tld/VpeTaglibManager.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/jst/web/tld/VpeTaglibManager.java 2008-02-07 13:49:32 UTC (rev 6155)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/jst/web/tld/VpeTaglibManager.java 2008-02-07 13:49:38 UTC (rev 6156)
@@ -11,6 +11,7 @@
package org.jboss.tools.jst.web.tld;
import java.util.List;
+import org.w3c.dom.Node;
/**
@@ -35,4 +36,10 @@
* @return
*/
public List<TaglibData> getTagLibs();
+
+ /**
+ * Sets node in scope of which we should show content assistent
+ * @param node
+ */
+ public void setReferenceNode(Node node);
}
\ No newline at end of file
16 years, 4 months
JBoss Tools SVN: r6155 - in trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor: context and 3 other directories.
by jbosstools-commits@lists.jboss.org
Author: mareshkau
Date: 2008-02-07 08:49:32 -0500 (Thu, 07 Feb 2008)
New Revision: 6155
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpePreviewDomBuilder.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/context/VpePageContext.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeDomMapping.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeElementMapping.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeJspRootCreator.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTaglibCreator.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSet.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeXmlnsCreator.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/XmlUtil.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-788
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -1,298 +1,299 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.vpe.editor;
-
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.editor;
+
import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
import org.eclipse.jface.bindings.Binding;
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.bindings.keys.KeyStroke;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.LineStyleEvent;
-import org.eclipse.swt.custom.LineStyleListener;
-import org.eclipse.swt.custom.StyleRange;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MenuListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.LineStyleEvent;
+import org.eclipse.swt.custom.LineStyleListener;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
import org.eclipse.ui.internal.keys.WorkbenchKeyboard;
import org.eclipse.ui.keys.IBindingService;
-import org.eclipse.ui.progress.UIJob;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-import org.eclipse.wst.sse.core.internal.model.ModelLifecycleEvent;
-import org.eclipse.wst.sse.core.internal.provisional.IModelLifecycleListener;
-import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
-import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
-import org.eclipse.wst.sse.ui.StructuredTextEditor;
-import org.eclipse.wst.sse.ui.internal.view.events.INodeSelectionListener;
-import org.eclipse.wst.sse.ui.internal.view.events.ITextSelectionListener;
-import org.eclipse.wst.sse.ui.internal.view.events.NodeSelectionChangedEvent;
-import org.eclipse.wst.sse.ui.internal.view.events.TextSelectionChangedEvent;
-import org.eclipse.wst.xml.core.internal.document.AttrImpl;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.eclipse.wst.xml.core.internal.document.NodeImpl;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.jboss.tools.common.model.XModelObject;
-import org.jboss.tools.common.model.event.XModelTreeEvent;
-import org.jboss.tools.common.model.event.XModelTreeListener;
-import org.jboss.tools.common.model.options.PreferenceModelUtilities;
-import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
-import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
-import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
-import org.jboss.tools.common.model.ui.editors.dnd.DropData;
-import org.jboss.tools.common.model.ui.editors.dnd.IDropCommand;
-import org.jboss.tools.common.model.ui.editors.dnd.JSPTagProposalFactory;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
-import org.jboss.tools.common.model.ui.objecteditor.ExtendedProperties;
-import org.jboss.tools.common.model.ui.objecteditor.ExtendedPropertiesWizard;
-import org.jboss.tools.common.model.ui.util.ModelUtilities;
-import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
-import org.jboss.tools.common.model.util.EclipseResourceUtil;
-import org.jboss.tools.common.model.util.ModelFeatureFactory;
-import org.jboss.tools.common.model.util.XModelTreeListenerSWTSync;
-import org.jboss.tools.jst.jsp.editor.IJSPTextEditor;
-import org.jboss.tools.jst.jsp.editor.IVisualController;
-import org.jboss.tools.jst.jsp.preferences.VpePreference;
-import org.jboss.tools.jst.web.tld.TLDToPaletteHelper;
-import org.jboss.tools.jst.web.tld.TLDUtil;
-import org.jboss.tools.jst.web.tld.URIConstants;
-import org.jboss.tools.vpe.VpeDebug;
-import org.jboss.tools.vpe.VpePlugin;
-import org.jboss.tools.vpe.editor.bundle.BundleMap;
-import org.jboss.tools.vpe.editor.context.VpePageContext;
-import org.jboss.tools.vpe.editor.css.AbsoluteFolderReferenceList;
-import org.jboss.tools.vpe.editor.css.CSSReferenceList;
-import org.jboss.tools.vpe.editor.css.RelativeFolderReferenceList;
-import org.jboss.tools.vpe.editor.css.ResourceReferenceListListener;
-import org.jboss.tools.vpe.editor.css.TaglibReferenceList;
-import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
-import org.jboss.tools.vpe.editor.mapping.VpeElementMapping;
-import org.jboss.tools.vpe.editor.menu.NodeActionManager;
-import org.jboss.tools.vpe.editor.menu.BaseActionManager.MyMenuManager;
-import org.jboss.tools.vpe.editor.mozilla.EditorDomEventListener;
-import org.jboss.tools.vpe.editor.mozilla.MozillaDropInfo;
-import org.jboss.tools.vpe.editor.mozilla.MozillaEditor;
-import org.jboss.tools.vpe.editor.selection.VpeSelectionController;
-import org.jboss.tools.vpe.editor.selection.VpeSelectionHelper;
-import org.jboss.tools.vpe.editor.template.VpeAnyData;
-import org.jboss.tools.vpe.editor.template.VpeEditAnyDialog;
-import org.jboss.tools.vpe.editor.template.VpeHtmlTemplate;
-import org.jboss.tools.vpe.editor.template.VpeIncludeList;
-import org.jboss.tools.vpe.editor.template.VpeTemplate;
-import org.jboss.tools.vpe.editor.template.VpeTemplateListener;
-import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
-import org.jboss.tools.vpe.editor.toolbar.format.FormatControllerManager;
-import org.jboss.tools.vpe.editor.util.HTML;
-import org.jboss.tools.vpe.editor.util.TextUtil;
-import org.jboss.tools.vpe.editor.util.VisualDomUtil;
-import org.jboss.tools.vpe.editor.util.VpeDndUtil;
-import org.jboss.tools.vpe.messages.VpeUIMessages;
-import org.jboss.tools.vpe.selbar.SelectionBar;
-import org.jboss.tools.vpe.xulrunner.browser.util.DOMTreeDumper;
-import org.jboss.tools.vpe.xulrunner.editor.XulRunnerEditor;
-import org.mozilla.interfaces.nsIDOMDocument;
-import org.mozilla.interfaces.nsIDOMElement;
-import org.mozilla.interfaces.nsIDOMEvent;
-import org.mozilla.interfaces.nsIDOMKeyEvent;
-import org.mozilla.interfaces.nsIDOMMouseEvent;
-import org.mozilla.interfaces.nsIDOMMutationEvent;
-import org.mozilla.interfaces.nsIDOMNode;
-import org.mozilla.interfaces.nsISelection;
-import org.mozilla.interfaces.nsISelectionListener;
-import org.mozilla.interfaces.nsISupports;
-import org.mozilla.xpcom.Mozilla;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
-
-public class VpeController implements INodeAdapter, IModelLifecycleListener, INodeSelectionListener, ITextSelectionListener, SelectionListener, EditorDomEventListener, VpeTemplateListener, XModelTreeListener, ResourceReferenceListListener, ISelectionChangedListener, IVisualController {
-
- StructuredTextEditor sourceEditor;
- private MozillaEditor visualEditor;
-// MozillaBrowser browser;
- XulRunnerEditor xulRunnerEditor;
- // TODO Sergey Vasilyev figure out with nsIPressShell
-// private nsIPresShell presShell;
- // TODO Max Areshkau figure out with nsISelectionController
- private VpeSelectionController visualSelectionController;
- VpeDomMapping domMapping;
- private VpeTemplateManager templateManager;
- private VpeSourceDomBuilder sourceBuilder;
- public VpeVisualDomBuilder visualBuilder;
- private VpeSelectionBuilder selectionBuilder;
- private VpeVisualKeyHandler visualKeyHandler;
- private ActiveEditorSwitcher switcher = new ActiveEditorSwitcher();
- private Attr lastRemovedAttr;
- private String lastRemovedAttrName;
- private boolean mouseUpSelectionReasonFlag;
- private boolean mouseDownSelectionFlag;
- private boolean sourceChangeFlag;
- private VpePageContext pageContext;
- private BundleMap bundle;
- private VpeEditorPart editPart;
- private static final int AROUND_MENU = 1;
- private static final int BEFORE_MENU = 2;
- private static final int AFTER_MENU = 3;
-
- private CSSReferenceList cssReferenceListListener;
- private TaglibReferenceList taglibReferenceListListener;
- private AbsoluteFolderReferenceList absoluteFolderReferenceListListener;
- private RelativeFolderReferenceList relativeFolderReferenceListListener;
- private VpeIncludeList includeList = new VpeIncludeList();
- private VpeVisualInnerDragInfo innerDragInfo = null;
- private FormatControllerManager toolbarFormatControllerManager = null;
- private SelectionBar selectionBar = null;
+import org.eclipse.ui.progress.UIJob;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.wst.sse.core.internal.model.ModelLifecycleEvent;
+import org.eclipse.wst.sse.core.internal.provisional.IModelLifecycleListener;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
+import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.eclipse.wst.sse.ui.internal.view.events.INodeSelectionListener;
+import org.eclipse.wst.sse.ui.internal.view.events.ITextSelectionListener;
+import org.eclipse.wst.sse.ui.internal.view.events.NodeSelectionChangedEvent;
+import org.eclipse.wst.sse.ui.internal.view.events.TextSelectionChangedEvent;
+import org.eclipse.wst.xml.core.internal.document.AttrImpl;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.document.NodeImpl;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.event.XModelTreeEvent;
+import org.jboss.tools.common.model.event.XModelTreeListener;
+import org.jboss.tools.common.model.options.PreferenceModelUtilities;
+import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
+import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
+import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
+import org.jboss.tools.common.model.ui.editors.dnd.DropData;
+import org.jboss.tools.common.model.ui.editors.dnd.IDropCommand;
+import org.jboss.tools.common.model.ui.editors.dnd.JSPTagProposalFactory;
+import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
+import org.jboss.tools.common.model.ui.objecteditor.ExtendedProperties;
+import org.jboss.tools.common.model.ui.objecteditor.ExtendedPropertiesWizard;
+import org.jboss.tools.common.model.ui.util.ModelUtilities;
+import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.model.util.ModelFeatureFactory;
+import org.jboss.tools.common.model.util.XModelTreeListenerSWTSync;
+import org.jboss.tools.jst.jsp.editor.IJSPTextEditor;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.jst.jsp.editor.IVisualController;
+import org.jboss.tools.jst.jsp.preferences.VpePreference;
+import org.jboss.tools.jst.web.tld.TLDToPaletteHelper;
+import org.jboss.tools.jst.web.tld.TLDUtil;
+import org.jboss.tools.jst.web.tld.URIConstants;
+import org.jboss.tools.vpe.VpeDebug;
+import org.jboss.tools.vpe.VpePlugin;
+import org.jboss.tools.vpe.editor.bundle.BundleMap;
+import org.jboss.tools.vpe.editor.context.VpePageContext;
+import org.jboss.tools.vpe.editor.css.AbsoluteFolderReferenceList;
+import org.jboss.tools.vpe.editor.css.CSSReferenceList;
+import org.jboss.tools.vpe.editor.css.RelativeFolderReferenceList;
+import org.jboss.tools.vpe.editor.css.ResourceReferenceListListener;
+import org.jboss.tools.vpe.editor.css.TaglibReferenceList;
+import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
+import org.jboss.tools.vpe.editor.mapping.VpeElementMapping;
+import org.jboss.tools.vpe.editor.menu.NodeActionManager;
+import org.jboss.tools.vpe.editor.menu.BaseActionManager.MyMenuManager;
+import org.jboss.tools.vpe.editor.mozilla.EditorDomEventListener;
+import org.jboss.tools.vpe.editor.mozilla.MozillaDropInfo;
+import org.jboss.tools.vpe.editor.mozilla.MozillaEditor;
+import org.jboss.tools.vpe.editor.selection.VpeSelectionController;
+import org.jboss.tools.vpe.editor.selection.VpeSelectionHelper;
+import org.jboss.tools.vpe.editor.template.VpeAnyData;
+import org.jboss.tools.vpe.editor.template.VpeEditAnyDialog;
+import org.jboss.tools.vpe.editor.template.VpeHtmlTemplate;
+import org.jboss.tools.vpe.editor.template.VpeIncludeList;
+import org.jboss.tools.vpe.editor.template.VpeTemplate;
+import org.jboss.tools.vpe.editor.template.VpeTemplateListener;
+import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
+import org.jboss.tools.vpe.editor.toolbar.format.FormatControllerManager;
+import org.jboss.tools.vpe.editor.util.HTML;
+import org.jboss.tools.vpe.editor.util.TextUtil;
+import org.jboss.tools.vpe.editor.util.VisualDomUtil;
+import org.jboss.tools.vpe.editor.util.VpeDndUtil;
+import org.jboss.tools.vpe.messages.VpeUIMessages;
+import org.jboss.tools.vpe.selbar.SelectionBar;
+import org.jboss.tools.vpe.xulrunner.browser.util.DOMTreeDumper;
+import org.jboss.tools.vpe.xulrunner.editor.XulRunnerEditor;
+import org.mozilla.interfaces.nsIDOMDocument;
+import org.mozilla.interfaces.nsIDOMElement;
+import org.mozilla.interfaces.nsIDOMEvent;
+import org.mozilla.interfaces.nsIDOMKeyEvent;
+import org.mozilla.interfaces.nsIDOMMouseEvent;
+import org.mozilla.interfaces.nsIDOMMutationEvent;
+import org.mozilla.interfaces.nsIDOMNode;
+import org.mozilla.interfaces.nsISelection;
+import org.mozilla.interfaces.nsISelectionListener;
+import org.mozilla.interfaces.nsISupports;
+import org.mozilla.xpcom.Mozilla;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+public class VpeController implements INodeAdapter, IModelLifecycleListener, INodeSelectionListener, ITextSelectionListener, SelectionListener, EditorDomEventListener, VpeTemplateListener, XModelTreeListener, ResourceReferenceListListener, ISelectionChangedListener, IVisualController {
+
+ StructuredTextEditor sourceEditor;
+ private MozillaEditor visualEditor;
+// MozillaBrowser browser;
+ XulRunnerEditor xulRunnerEditor;
+ // TODO Sergey Vasilyev figure out with nsIPressShell
+// private nsIPresShell presShell;
+ // TODO Max Areshkau figure out with nsISelectionController
+ private VpeSelectionController visualSelectionController;
+ VpeDomMapping domMapping;
+ private VpeTemplateManager templateManager;
+ private VpeSourceDomBuilder sourceBuilder;
+ public VpeVisualDomBuilder visualBuilder;
+ private VpeSelectionBuilder selectionBuilder;
+ private VpeVisualKeyHandler visualKeyHandler;
+ private ActiveEditorSwitcher switcher = new ActiveEditorSwitcher();
+ private Attr lastRemovedAttr;
+ private String lastRemovedAttrName;
+ private boolean mouseUpSelectionReasonFlag;
+ private boolean mouseDownSelectionFlag;
+ private boolean sourceChangeFlag;
+ private VpePageContext pageContext;
+ private BundleMap bundle;
+ private VpeEditorPart editPart;
+ private static final int AROUND_MENU = 1;
+ private static final int BEFORE_MENU = 2;
+ private static final int AFTER_MENU = 3;
+
+ private CSSReferenceList cssReferenceListListener;
+ private TaglibReferenceList taglibReferenceListListener;
+ private AbsoluteFolderReferenceList absoluteFolderReferenceListListener;
+ private RelativeFolderReferenceList relativeFolderReferenceListListener;
+ private VpeIncludeList includeList = new VpeIncludeList();
+ private VpeVisualInnerDragInfo innerDragInfo = null;
+ private FormatControllerManager toolbarFormatControllerManager = null;
+ private SelectionBar selectionBar = null;
private XModelTreeListenerSWTSync optionsListener;
- //Added by Max Areshkau Fix for JBIDE-1479
- private UIJob job = null;
- Shell tip;
-
- public final static String MODEL_FLAVOR = ModelTransfer.MODEL; //$NON-NLS-1$
-
- public VpeController(VpeEditorPart editPart){
-
- this.editPart = editPart;
- dropWindow = new VpeDropWindow(editPart.getSite().getShell());
- }
-
- void init(StructuredTextEditor sourceEditor, MozillaEditor visualEditor) throws Exception {
- this.sourceEditor = sourceEditor;
- if(sourceEditor instanceof IJSPTextEditor) {
- ((IJSPTextEditor)sourceEditor).setVPEController(this);
- dropWindow.setEditor((IJSPTextEditor)sourceEditor);
- }
- this.visualEditor = visualEditor;
- visualEditor.setController(this);
- templateManager = VpeTemplateManager.getInstance();
- bundle = new BundleMap();
- bundle.init(sourceEditor);
- pageContext = new VpePageContext(templateManager, bundle, editPart);
- domMapping = new VpeDomMapping(pageContext);
- sourceBuilder = new VpeSourceDomBuilder(domMapping, this, templateManager, sourceEditor, pageContext);
- visualBuilder = new VpeVisualDomBuilder(domMapping, this, templateManager, visualEditor, pageContext);
- pageContext.setSourceDomBuilder(sourceBuilder);
- pageContext.setVisualDomBuilder(visualBuilder);
- IDOMModel sourceModel = (IDOMModel)getModel();
- if (sourceModel == null) {
- return;
- }
- sourceModel.addModelLifecycleListener(this);
- IDOMDocument sourceDocument = sourceModel.getDocument();
- visualBuilder.refreshExternalLinks();
- visualBuilder.buildDom(sourceDocument);
-
- templateManager.addTemplateListener(this);
-
- xulRunnerEditor = visualEditor.getXulRunnerEditor();
- // TODO Sergey Vasilyev figure out with nsIPressShell
-// presShell = browser.getPresShell();
- visualSelectionController = new VpeSelectionController(xulRunnerEditor.getSelection());
- selectionBuilder = new VpeSelectionBuilder(domMapping, sourceBuilder, visualBuilder, visualSelectionController);
- visualKeyHandler = new VpeVisualKeyHandler(sourceEditor, domMapping, pageContext){
- public void doSave(IProgressMonitor monitor){
- editPart.doSave(monitor);
- }
- };
-
-// glory
- ISelectionProvider provider = sourceEditor.getSelectionProvider();
+ //Added by Max Areshkau Fix for JBIDE-1479
+ private UIJob job = null;
+ Shell tip;
+
+ public final static String MODEL_FLAVOR = ModelTransfer.MODEL; //$NON-NLS-1$
+
+ public VpeController(VpeEditorPart editPart){
+
+ this.editPart = editPart;
+ dropWindow = new VpeDropWindow(editPart.getSite().getShell());
+ }
+
+ void init(StructuredTextEditor sourceEditor, MozillaEditor visualEditor) throws Exception {
+ this.sourceEditor = sourceEditor;
+ if(sourceEditor instanceof IJSPTextEditor) {
+ ((IJSPTextEditor)sourceEditor).setVPEController(this);
+ dropWindow.setEditor((IJSPTextEditor)sourceEditor);
+ }
+ this.visualEditor = visualEditor;
+ visualEditor.setController(this);
+ templateManager = VpeTemplateManager.getInstance();
+ bundle = new BundleMap();
+ bundle.init(sourceEditor);
+ pageContext = new VpePageContext(templateManager, bundle, editPart);
+ domMapping = new VpeDomMapping(pageContext);
+ sourceBuilder = new VpeSourceDomBuilder(domMapping, this, templateManager, sourceEditor, pageContext);
+ visualBuilder = new VpeVisualDomBuilder(domMapping, this, templateManager, visualEditor, pageContext);
+ pageContext.setSourceDomBuilder(sourceBuilder);
+ pageContext.setVisualDomBuilder(visualBuilder);
+ IDOMModel sourceModel = (IDOMModel)getModel();
+ if (sourceModel == null) {
+ return;
+ }
+ sourceModel.addModelLifecycleListener(this);
+ IDOMDocument sourceDocument = sourceModel.getDocument();
+ visualBuilder.refreshExternalLinks();
+ visualBuilder.buildDom(sourceDocument);
+
+ templateManager.addTemplateListener(this);
+
+ xulRunnerEditor = visualEditor.getXulRunnerEditor();
+ // TODO Sergey Vasilyev figure out with nsIPressShell
+// presShell = browser.getPresShell();
+ visualSelectionController = new VpeSelectionController(xulRunnerEditor.getSelection());
+ selectionBuilder = new VpeSelectionBuilder(domMapping, sourceBuilder, visualBuilder, visualSelectionController);
+ visualKeyHandler = new VpeVisualKeyHandler(sourceEditor, domMapping, pageContext){
+ public void doSave(IProgressMonitor monitor){
+ editPart.doSave(monitor);
+ }
+ };
+
+// glory
+ ISelectionProvider provider = sourceEditor.getSelectionProvider();
//Max Areshkau JBIDE-1105 If selection event received after selection in
//visual part we lost focus of selection, so we should process selection event
//in time of selection
// if (provider instanceof IPostSelectionProvider)
// ((IPostSelectionProvider) provider).addPostSelectionChangedListener(this);
// else
- provider.addSelectionChangedListener(this);
-
-// ViewerSelectionManager selectionManager = sourceEditor.getViewerSelectionManager();
-// selectionManager.addNodeSelectionListener(this);
-// selectionManager.addTextSelectionListener(this);
- StyledText textWidget = VpeSelectionHelper.getSourceTextWidget(sourceEditor);
- if (textWidget != null) {
- textWidget.addSelectionListener(this);
- }
-
- visualEditor.setEditorDomEventListener(this);
- switcher.initActiveEditor();
-
+ provider.addSelectionChangedListener(this);
+
+// ViewerSelectionManager selectionManager = sourceEditor.getViewerSelectionManager();
+// selectionManager.addNodeSelectionListener(this);
+// selectionManager.addTextSelectionListener(this);
+ StyledText textWidget = VpeSelectionHelper.getSourceTextWidget(sourceEditor);
+ if (textWidget != null) {
+ textWidget.addSelectionListener(this);
+ }
+
+ visualEditor.setEditorDomEventListener(this);
+ switcher.initActiveEditor();
+
if (optionsListener == null) {
- XModelObject optionsObject = ModelUtilities.getPreferenceModel().getByPath(VpePreference.EDITOR_PATH);
+ XModelObject optionsObject = ModelUtilities.getPreferenceModel().getByPath(VpePreference.EDITOR_PATH);
optionsListener = new XModelTreeListenerSWTSync(this);
- optionsObject.getModel().addModelTreeListener(optionsListener);
+ optionsObject.getModel().addModelTreeListener(optionsListener);
}
-
-
- cssReferenceListListener = CSSReferenceList.getInstance();
- cssReferenceListListener.addChangeListener(this);
-
- taglibReferenceListListener = TaglibReferenceList.getInstance();
- taglibReferenceListListener.addChangeListener(this);
-
- absoluteFolderReferenceListListener = AbsoluteFolderReferenceList.getInstance();
- absoluteFolderReferenceListListener.addChangeListener(this);
-
- relativeFolderReferenceListListener = RelativeFolderReferenceList.getInstance();
- relativeFolderReferenceListListener.addChangeListener(this);
-
- pageContext.fireTaglibsChanged();
- }
-
- public void dispose() {
+
+
+ cssReferenceListListener = CSSReferenceList.getInstance();
+ cssReferenceListListener.addChangeListener(this);
+
+ taglibReferenceListListener = TaglibReferenceList.getInstance();
+ taglibReferenceListListener.addChangeListener(this);
+
+ absoluteFolderReferenceListListener = AbsoluteFolderReferenceList.getInstance();
+ absoluteFolderReferenceListListener.addChangeListener(this);
+
+ relativeFolderReferenceListListener = RelativeFolderReferenceList.getInstance();
+ relativeFolderReferenceListListener.addChangeListener(this);
+
+// pageContext.fireTaglibsChanged();
+ }
+
+ public void dispose() {
if (optionsListener != null) {
XModelObject optionsObject = ModelUtilities.getPreferenceModel().getByPath(VpePreference.EDITOR_PATH);
optionsObject.getModel().removeModelTreeListener(optionsListener);
@@ -303,569 +304,572 @@
if (sourceModel != null) {
sourceModel.removeModelLifecycleListener(this);
}
- switcher.destroyActiveEditor();
+ switcher.destroyActiveEditor();
switcher=null;
-
- if (templateManager != null) {
- templateManager.removeTemplateListener(this);
+
+ if (templateManager != null) {
+ templateManager.removeTemplateListener(this);
templateManager=null;
- }
- if (visualBuilder != null) {
- visualBuilder.dispose();
- visualBuilder = null;
- }
+ }
+ if (visualBuilder != null) {
+ visualBuilder.dispose();
+ visualBuilder = null;
+ }
sourceBuilder=null;
- if (sourceEditor != null) {
-//glory
- ISelectionProvider provider = sourceEditor.getSelectionProvider();
- provider.removeSelectionChangedListener(this);
-// ViewerSelectionManager selectionManager = sourceEditor.getViewerSelectionManager();
-// selectionManager.removeNodeSelectionListener(this);
-// selectionManager.removeTextSelectionListener(this);
- StyledText textWidget = VpeSelectionHelper.getSourceTextWidget(sourceEditor);
- if (textWidget != null) {
- textWidget.removeSelectionListener(this);
- }
+ if (sourceEditor != null) {
+//glory
+ ISelectionProvider provider = sourceEditor.getSelectionProvider();
+ provider.removeSelectionChangedListener(this);
+// ViewerSelectionManager selectionManager = sourceEditor.getViewerSelectionManager();
+// selectionManager.removeNodeSelectionListener(this);
+// selectionManager.removeTextSelectionListener(this);
+ StyledText textWidget = VpeSelectionHelper.getSourceTextWidget(sourceEditor);
+ if (textWidget != null) {
+ textWidget.removeSelectionListener(this);
+ }
((IJSPTextEditor)sourceEditor).setVPEController(null);
- }
+ }
if (dropWindow != null) {
dropWindow.setEditor(null);
}
- if (visualEditor != null) {
- visualEditor.setEditorDomEventListener(null);
- if (visualSelectionController != null) {
-// visualSelectionController.Release();
- visualSelectionController = null;
- }
- // TODO Sergey Vasilyev figure out with Press Shell
-// if (presShell != null) {
-// presShell.Release();
-// presShell = null;
-// }
+ if (visualEditor != null) {
+ visualEditor.setEditorDomEventListener(null);
+ if (visualSelectionController != null) {
+// visualSelectionController.Release();
+ visualSelectionController = null;
+ }
+ // TODO Sergey Vasilyev figure out with Press Shell
+// if (presShell != null) {
+// presShell.Release();
+// presShell = null;
+// }
visualEditor = null;
- }
-
- if (cssReferenceListListener != null) {
- cssReferenceListListener.removeChangeListener(this);
- }
- if (taglibReferenceListListener != null) {
- taglibReferenceListListener.removeChangeListener(this);
- }
- if (absoluteFolderReferenceListListener != null) {
- absoluteFolderReferenceListListener.removeChangeListener(this);
- }
- if (relativeFolderReferenceListListener != null) {
- relativeFolderReferenceListListener.removeChangeListener(this);
- }
+ }
+
+ if (cssReferenceListListener != null) {
+ cssReferenceListListener.removeChangeListener(this);
+ }
+ if (taglibReferenceListListener != null) {
+ taglibReferenceListListener.removeChangeListener(this);
+ }
+ if (absoluteFolderReferenceListListener != null) {
+ absoluteFolderReferenceListListener.removeChangeListener(this);
+ }
+ if (relativeFolderReferenceListListener != null) {
+ relativeFolderReferenceListListener.removeChangeListener(this);
+ }
toolbarFormatControllerManager = null;
- }
-
- // INodeAdapter implementation
- public boolean isAdapterForType(Object type) {
- return type == this;
- }
- //FIX Fox JBIDE-1479 added by Max Areshkau
- public void notifyChanged(final INodeNotifier notifier, final int eventType,final Object feature,final Object oldValue,final Object newValue, final int pos) {
-
- //start job when we modify file in ui thread, without this code
- //changes will be applied with 1 second delay
- Display display = null;
- if (PlatformUI.isWorkbenchRunning())
- display= PlatformUI.getWorkbench().getDisplay();
-
- if (display != null && (Thread.currentThread() == display.getThread())) {
- notifyChangedInUiThread(notifier, eventType, feature, oldValue, newValue, pos);
- return;
- }
- //start job when we modify file in non ui thread
- if(job!=null) {
- job.cancel();
- }
-
- job = new UIJob("NotifyChangedJob"){
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- //we checks is job was canceled and if is it true we cancel job
- if(monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- } else {
- notifyChangedInUiThread(notifier, eventType, feature, oldValue, newValue, pos);
- }
- return Status.OK_STATUS;
- }};
- job.setPriority(Job.LONG);
- job.schedule(1000L);
- }
-
- public void notifyChangedInUiThread(INodeNotifier notifier, int eventType, Object feature, Object oldValue, Object newValue, int pos) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (VpeDebug.PRINT_SOURCE_MUTATION_EVENT) {
- printSourceEvent(notifier, eventType, feature, oldValue, newValue, pos);
- }
- if(visualBuilder==null) {
- return;
- }
- visualBuilder.rebuildFlag = false;
-
- switch (eventType) {
- case INodeNotifier.CHANGE:
- sourceChangeFlag = true;
- int type = ((Node)notifier).getNodeType();
- visualEditor.hideResizer();
- visualBuilder.setSelectionRectangle(null);
- if (type == Node.TEXT_NODE) {
- visualBuilder.setText((Node)notifier);
- visualEditor.showResizer();
- //Added by Max Areshkau JBIDE-1554
- visualBuilder.updateNode((Node)notifier);
- } else if (type == Node.COMMENT_NODE) {
- if("yes".equals(VpePreference.SHOW_COMMENTS.getValue())) { //$NON-NLS-1$
- visualBuilder.setSelectionRectangle(null);
- visualBuilder.updateNode((Node)notifier);
- }
- } else if (feature != null && ((Node)feature).getNodeType() == Node.ATTRIBUTE_NODE) {
- if (newValue != null) {
- String attrName = ((Attr)feature).getName();
- if ((Attr)feature == lastRemovedAttr && !attrName.equals(lastRemovedAttrName)) {
- lastRemovedAttr = null;
- visualBuilder.removeAttribute((Element)notifier, lastRemovedAttrName);
- }
- visualBuilder.setAttribute((Element)notifier, ((Attr)feature).getName(), (String)newValue);
- } else {
- lastRemovedAttr = (Attr)feature;
- lastRemovedAttrName = ((Attr)feature).getName();
- visualBuilder.removeAttribute((Element)notifier, lastRemovedAttrName);
- }
- }
- visualEditor.showResizer();
- break;
-
- case INodeNotifier.ADD:
- break;
-
- case INodeNotifier.REMOVE:
- visualBuilder.stopToggle((Node)feature);
- visualBuilder.removeNode((Node)feature);
- break;
-
- case INodeNotifier.STRUCTURE_CHANGED:
- visualEditor.hideResizer();
- visualBuilder.setSelectionRectangle(null);
- visualBuilder.updateNode((Node)notifier);
- break;
- case INodeNotifier.CONTENT_CHANGED:
- if (!sourceChangeFlag) {
- if (feature != null && ((Node)feature).getNodeType() == Node.TEXT_NODE) {
- //if (((Node)notifier).getNodeName().equalsIgnoreCase("style")) {
- visualEditor.hideResizer();
- visualBuilder.setSelectionRectangle(null);
- visualBuilder.setText((Node)feature);
- visualEditor.showResizer();
- //}
- }
- } else {
- sourceChangeFlag = false;
- }
- break;
- }
- if (visualBuilder.rebuildFlag) {
- pageContext.fireTaglibsChanged();
- } else if (pageContext.isTaglibChanged()) {
- visualRefreshImpl();
- pageContext.fireTaglibsChanged();
- }
- switcher.stopActiveEditor();
- }
-
- // INodeSelectionListener implementation
- public void nodeSelectionChanged(NodeSelectionChangedEvent event) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- List<?> nodes = event.getSelectedNodes();
- if (nodes != null && nodes.size() > 0) {
- Node sourceNode = (Node)nodes.get(0);
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println(">>>>>>>>>>>>>> nodeSelectionChanged sourceNode: " + sourceNode.getNodeName() + " " + event.getCaretPosition()); //$NON-NLS-1$ //$NON-NLS-2$
- }
- if (event.getSource() instanceof IContentOutlinePage) {
- sourceSelectionChanged();
- }
- }
- switcher.stopActiveEditor();
- }
-
- // ITextSelectionListener implementation
- //TODO Max Areshau looks like this method don't used
- public void textSelectionChanged(TextSelectionChangedEvent event) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println(">>>>>>>>>>>>>> textSelectionChanged " + event.getSource()); //$NON-NLS-1$
- }
-// if (event.getSource() instanceof StyledText) {
- sourceSelectionChanged();
-// }
- switcher.stopActiveEditor();
- }
-
- // SelectionListener implementation
- public void widgetSelected(SelectionEvent event) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println(">>>>>>>>>>>>>> widgetSelected"); //$NON-NLS-1$
- }
- if (event.getSource() instanceof StyledText) {
- sourceSelectionChanged();
- }
- switcher.stopActiveEditor();
- }
-
- public void widgetDefaultSelected(SelectionEvent event) {
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println(">>>>>>>>>>>>>> widgetDefaultSelected"); //$NON-NLS-1$
- }
- }
-
- public void sourceSelectionChanged() {
- sourceSelectionChanged(false);
- }
-
- public void sourceSelectionChanged(boolean showCaret) {
- Point range = sourceEditor.getTextViewer().getSelectedRange();
- int anchorPosition = range.x;
- int focusPosition = range.x + range.y;
- boolean extendFlag = range.y != 0;
- boolean reversionFlag = extendFlag && anchorPosition == VpeSelectionHelper.getCaretOffset(sourceEditor);
- if (reversionFlag) {
- anchorPosition = focusPosition;
- focusPosition = range.x;
- }
- Node focusNode = getSourceNodeAt(focusPosition);
- if (focusNode == null) {
- return;
- }
- int focusOffset = getSourceNodeOffset(focusNode, focusPosition, extendFlag && !reversionFlag);
- Node anchorNode = null;
- int anchorOffset = 0;
- if (extendFlag) {
- anchorNode = getSourceNodeAt(anchorPosition);
- anchorOffset = getSourceNodeOffset(anchorNode, anchorPosition, reversionFlag);
- } else {
- anchorNode = focusNode;
- anchorOffset = focusOffset;
- }
-
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println("sourceSelectionChanged"); //$NON-NLS-1$
- System.out.println(" anchorNode: " + anchorNode.getNodeName() + " anchorOffset: " + anchorOffset); //$NON-NLS-1$ //$NON-NLS-2$
- System.out.println(" focusNode: " + focusNode.getNodeName() + " focusOffset: " + focusOffset + " focusPosition: " + focusPosition); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- try{
- if(anchorNode.getNodeType() == Node.TEXT_NODE || anchorNode.getNodeType() == Node.ATTRIBUTE_NODE){
- String text;
- if (anchorNode.getNodeType() == Node.TEXT_NODE) {
- IndexedRegion region = (IndexedRegion)anchorNode;
- text = sourceEditor.getTextViewer().getDocument().get(region.getStartOffset(), region.getEndOffset()-region.getStartOffset());
- } else {
- text = ((AttrImpl)anchorNode).getValueRegionText();
- }
- anchorOffset = TextUtil.visualPosition(text, anchorOffset);
- }
- if(focusNode.getNodeType() == Node.TEXT_NODE || focusNode.getNodeType() == Node.ATTRIBUTE_NODE){
- IndexedRegion region = (IndexedRegion)focusNode;
- String text;
- if (focusNode.getNodeType() == Node.TEXT_NODE) {
- text = sourceEditor.getTextViewer().getDocument().get(region.getStartOffset(), region.getEndOffset()-region.getStartOffset());
- } else {
- text = ((AttrImpl)focusNode).getValueRegionText();
- }
- focusOffset = TextUtil.visualPosition(text, focusOffset);
- }
- }catch(Exception ex){
- VpePlugin.reportProblem(ex);
- }
-
- selectionBuilder.setVisualSelection(anchorNode, anchorOffset, focusNode, focusOffset, reversionFlag, showCaret);
- }
-
- public void sourceSelectionToVisualSelection(boolean showCaret) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- sourceSelectionChanged(showCaret);
- switcher.stopActiveEditor();
- }
-
- // IModelLifecycleListener implementation
- public void processPreModelEvent(ModelLifecycleEvent event) {
- }
-
- public void processPostModelEvent(ModelLifecycleEvent event) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (event.getType() == ModelLifecycleEvent.MODEL_RELEASED) {
- if (VpeDebug.PRINT_SOURCE_MODEL_LIFECYCLE_EVENT) {
- System.out.println(">>> processPostModelEvent: " + event.toString()); //$NON-NLS-1$
- }
- visualBuilder.setSelectionRectangle(null);
- IStructuredModel model = event.getModel();
- model.removeModelLifecycleListener(this);
- IDOMModel sourceModel = (IDOMModel)getModel();
- sourceModel.addModelLifecycleListener(this);
- bundle.clearAll();
- bundle.refresh();
- visualBuilder.setSelectionRectangle(null);
- IDOMDocument sourceDocument = sourceModel.getDocument();
- visualBuilder.rebuildDom(sourceDocument);
- pageContext.fireTaglibsChanged();
- }
- switcher.stopActiveEditor();
- }
-
- // EditorDomEventListener implementation
- public void subtreeModified(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void nodeInserted(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- nsIDOMNode targetNode = mutationEvent.getRelatedNode();
- if (!VpeVisualDomBuilder.isAnonElement(targetNode)) {
- sourceBuilder.addNode(targetNode);
- visualBuilder.resetPseudoElement(targetNode);
- }
- switcher.stopActiveEditor();
- }
-
- public void nodeRemoved(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
- if (!VpeVisualDomBuilder.isAnonElement(targetNode)) {
- visualBuilder.setSelectionRectangle(null);
- sourceBuilder.removeNode(targetNode);
- visualBuilder.resetPseudoElement(targetNode);
- }
- switcher.stopActiveEditor();
- }
-
- public void nodeRemovedFromDocument(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void nodeInsertedIntoDocument(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void attrModified(nsIDOMMutationEvent mutationEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void characterDataModified(nsIDOMMutationEvent mutationEvent) {
-
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
- printVisualEvent(mutationEvent);
- }
- nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
- sourceBuilder.setText(targetNode);
- visualBuilder.resetPseudoElement(targetNode);
- switcher.stopActiveEditor();
- }
-
- public void notifySelectionChanged(nsIDOMDocument doc, nsISelection selection, short reason) {
- if (switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- mouseUpSelectionReasonFlag = (reason & nsISelectionListener.MOUSEUP_REASON) > 0;
- if (mouseUpSelectionReasonFlag || reason == nsISelectionListener.NO_REASON || reason == nsISelectionListener.KEYPRESS_REASON || reason == nsISelectionListener.SELECTALL_REASON || (reason & nsISelectionListener.MOUSEDOWN_REASON) > 0) {
- if (VpeDebug.PRINT_VISUAL_SELECTION_EVENT) {
- System.out.println("<<< notifySelectionChanged: " + reason); //$NON-NLS-1$
- }
- selectionBuilder.setSelection(selection);
- }
- switcher.stopActiveEditor();
- }
- }
-
-
- public void mouseDown(nsIDOMMouseEvent mouseEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- nsIDOMElement visualDragElement = selectionBuilder.getDragElement(mouseEvent);
- if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
- System.out.println("<<< mouseDown targetNode: " + visualNode.getNodeName() + " (" + visualNode + ") selectedElement: " + (visualDragElement != null ? visualDragElement.getNodeName() + " (" + visualDragElement + ")" : null)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- }
- mouseDownSelectionFlag = false;
-
- if (visualDragElement != null) {
-
- //we shouldn't change selection when we click on <input type="text" /> element,
- //because if we change after resizing the input element lost selection
- if(!(HTML.TAG_INPUT.equalsIgnoreCase(visualDragElement.getNodeName())&&
- HTML.ATTR_TEXT.equalsIgnoreCase(visualDragElement.getAttribute(HTML.ATTR_TYPE))
- &&visualDragElement.getAttribute(HTML.ATTR_TYPE)!=null)) {
-
- selectionBuilder.setVisualElementSelection(visualDragElement);
- mouseDownSelectionFlag = true;
- }
- } else {
- selectionBuilder.setCaretAtMouse(mouseEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void mouseUp(nsIDOMMouseEvent mouseEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
- System.out.println("<<< mouseUp"); //$NON-NLS-1$
- }
- if (mouseDownSelectionFlag) {
- mouseEvent.preventDefault();
- mouseEvent.stopPropagation();
- mouseDownSelectionFlag = false;
- }
- switcher.stopActiveEditor();
- }
-
- public void mouseClick(nsIDOMMouseEvent mouseEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
-
- if (visualNode != null) {
- if (!mouseUpSelectionReasonFlag) {
- if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
- System.out.println("<<< mouseClick visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- if (visualBuilder.isContentArea(visualNode)) {
- selectionBuilder.setClickContentAreaSelection();
- }
- } else {
- mouseUpSelectionReasonFlag = false;
- }
-
- if (visualBuilder.doToggle(VisualDomUtil.getTargetNode(mouseEvent))) {
- selectionBuilder.setClickContentAreaSelection();
- }
- }
- switcher.stopActiveEditor();
- }
-
- public void mouseDblClick(nsIDOMMouseEvent mouseEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
- if (visualNode != null) {
- if (!sourceBuilder.openBundleEditors(visualNode)) {
- sourceBuilder.openIncludeEditor(visualNode);
- }
- if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
- System.out.println("<<< mouseDblClick visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- }
- switcher.stopActiveEditor();
- }
-
- public void mouseMove(nsIDOMMouseEvent mouseEvent) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
- if (visualNode != null) {
- if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
- System.out.println("<<< mouseMove visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")");
- }
- visualBuilder.setMoveCursor(mouseEvent);
- }
- switcher.stopActiveEditor();
- }
-
- public void keyPress(nsIDOMKeyEvent keyEvent) {
- if (VpeDebug.PRINT_VISUAL_KEY_EVENT) {
- System.out.println("<<< keyPress type: " + keyEvent.getType() + " Ctrl: " + keyEvent.getCtrlKey() + " Shift: " + keyEvent.getShiftKey() + " CharCode: " + keyEvent.getCharCode() + " KeyCode: " + keyEvent.getKeyCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- }
-
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- switcher.stopActiveEditor();
- return;
- }
-
- visualEditor.hideResizer();
- switcher.stopActiveEditor();
-
-
- try {
- if (visualKeyHandler.keyPressHandler(keyEvent)) {
- switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL);
- // Edward
- sourceSelectionChanged(true);
- visualSelectionController.setCaretEnabled(true);
- switcher.stopActiveEditor();
- } else {
- //adding calls of core event handlers, for example 'CTR+H' or 'CTRL+M' event handler dialog
- Event keyboardEvent = new Event ();
- //widget where event occur
- keyboardEvent.widget = xulRunnerEditor.getBrowser();
-
- keyboardEvent.stateMask = (keyEvent.getAltKey() ? SWT.ALT : 0) | (keyEvent.getCtrlKey() ? SWT.CTRL : 0) | (keyEvent.getShiftKey() ? SWT.SHIFT : 0) | (keyEvent.getMetaKey() ? SWT.MOD1 : 0);
- keyboardEvent.x=0;
- keyboardEvent.y=0;
- keyboardEvent.type=SWT.KeyDown;
-
- if(keyEvent.getKeyCode()==0) {
- keyboardEvent.keyCode=(int)keyEvent.getCharCode();
- } else{
+ }
+
+ // INodeAdapter implementation
+ public boolean isAdapterForType(Object type) {
+ return type == this;
+ }
+ //FIX Fox JBIDE-1479 added by Max Areshkau
+ public void notifyChanged(final INodeNotifier notifier, final int eventType,final Object feature,final Object oldValue,final Object newValue, final int pos) {
+
+ //start job when we modify file in ui thread, without this code
+ //changes will be applied with 1 second delay
+ Display display = null;
+ if (PlatformUI.isWorkbenchRunning())
+ display= PlatformUI.getWorkbench().getDisplay();
+
+ if (display != null && (Thread.currentThread() == display.getThread())) {
+ notifyChangedInUiThread(notifier, eventType, feature, oldValue, newValue, pos);
+ return;
+ }
+ //start job when we modify file in non ui thread
+ if(job!=null) {
+ job.cancel();
+ }
+
+ job = new UIJob("NotifyChangedJob"){
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ //we checks is job was canceled and if is it true we cancel job
+ if(monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ } else {
+ notifyChangedInUiThread(notifier, eventType, feature, oldValue, newValue, pos);
+ }
+ return Status.OK_STATUS;
+ }};
+ job.setPriority(Job.LONG);
+ job.schedule(1000L);
+ }
+
+ public void notifyChangedInUiThread(INodeNotifier notifier, int eventType, Object feature, Object oldValue, Object newValue, int pos) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (VpeDebug.PRINT_SOURCE_MUTATION_EVENT) {
+ printSourceEvent(notifier, eventType, feature, oldValue, newValue, pos);
+ }
+ if(visualBuilder==null) {
+ return;
+ }
+ visualBuilder.rebuildFlag = false;
+
+ switch (eventType) {
+ case INodeNotifier.CHANGE:
+ sourceChangeFlag = true;
+ int type = ((Node)notifier).getNodeType();
+ visualEditor.hideResizer();
+ visualBuilder.setSelectionRectangle(null);
+ if (type == Node.TEXT_NODE) {
+ visualBuilder.setText((Node)notifier);
+ visualEditor.showResizer();
+ //Added by Max Areshkau JBIDE-1554
+ visualBuilder.updateNode((Node)notifier);
+ } else if (type == Node.COMMENT_NODE) {
+ if("yes".equals(VpePreference.SHOW_COMMENTS.getValue())) { //$NON-NLS-1$
+ visualBuilder.setSelectionRectangle(null);
+ visualBuilder.updateNode((Node)notifier);
+ }
+ } else if (feature != null && ((Node)feature).getNodeType() == Node.ATTRIBUTE_NODE) {
+ if (newValue != null) {
+ String attrName = ((Attr)feature).getName();
+ if ((Attr)feature == lastRemovedAttr && !attrName.equals(lastRemovedAttrName)) {
+ lastRemovedAttr = null;
+ visualBuilder.removeAttribute((Element)notifier, lastRemovedAttrName);
+ }
+ visualBuilder.setAttribute((Element)notifier, ((Attr)feature).getName(), (String)newValue);
+ } else {
+ lastRemovedAttr = (Attr)feature;
+ lastRemovedAttrName = ((Attr)feature).getName();
+ visualBuilder.removeAttribute((Element)notifier, lastRemovedAttrName);
+ }
+ }
+ visualEditor.showResizer();
+ break;
+
+ case INodeNotifier.ADD:
+ break;
+
+ case INodeNotifier.REMOVE:
+ visualBuilder.stopToggle((Node)feature);
+ visualBuilder.removeNode((Node)feature);
+ break;
+
+ case INodeNotifier.STRUCTURE_CHANGED:
+ visualEditor.hideResizer();
+ visualBuilder.setSelectionRectangle(null);
+ visualBuilder.updateNode((Node)notifier);
+ break;
+ case INodeNotifier.CONTENT_CHANGED:
+ if (!sourceChangeFlag) {
+ if (feature != null && ((Node)feature).getNodeType() == Node.TEXT_NODE) {
+ //if (((Node)notifier).getNodeName().equalsIgnoreCase("style")) {
+ visualEditor.hideResizer();
+ visualBuilder.setSelectionRectangle(null);
+ visualBuilder.setText((Node)feature);
+ visualEditor.showResizer();
+ //}
+ }
+ } else {
+ sourceChangeFlag = false;
+ }
+ break;
+ }
+ if (visualBuilder.rebuildFlag) {
+// pageContext.fireTaglibsChanged();
+ }
+ //TODO Max Areshkau JBIDE-788
+// else if (pageContext.isTaglibChanged()) {
+// visualRefreshImpl();
+//// pageContext.fireTaglibsChanged();
+// }
+ switcher.stopActiveEditor();
+ }
+
+ // INodeSelectionListener implementation
+ public void nodeSelectionChanged(NodeSelectionChangedEvent event) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ List<?> nodes = event.getSelectedNodes();
+ if (nodes != null && nodes.size() > 0) {
+ Node sourceNode = (Node)nodes.get(0);
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println(">>>>>>>>>>>>>> nodeSelectionChanged sourceNode: " + sourceNode.getNodeName() + " " + event.getCaretPosition()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ if (event.getSource() instanceof IContentOutlinePage) {
+ sourceSelectionChanged();
+ }
+ }
+ switcher.stopActiveEditor();
+ }
+
+ // ITextSelectionListener implementation
+ //TODO Max Areshau looks like this method don't used
+ public void textSelectionChanged(TextSelectionChangedEvent event) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println(">>>>>>>>>>>>>> textSelectionChanged " + event.getSource()); //$NON-NLS-1$
+ }
+// if (event.getSource() instanceof StyledText) {
+ sourceSelectionChanged();
+// }
+ switcher.stopActiveEditor();
+ }
+
+ // SelectionListener implementation
+ public void widgetSelected(SelectionEvent event) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println(">>>>>>>>>>>>>> widgetSelected"); //$NON-NLS-1$
+ }
+ if (event.getSource() instanceof StyledText) {
+ sourceSelectionChanged();
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent event) {
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println(">>>>>>>>>>>>>> widgetDefaultSelected"); //$NON-NLS-1$
+ }
+ }
+
+ public void sourceSelectionChanged() {
+ sourceSelectionChanged(false);
+ }
+
+ public void sourceSelectionChanged(boolean showCaret) {
+ Point range = sourceEditor.getTextViewer().getSelectedRange();
+ int anchorPosition = range.x;
+ int focusPosition = range.x + range.y;
+ boolean extendFlag = range.y != 0;
+ boolean reversionFlag = extendFlag && anchorPosition == VpeSelectionHelper.getCaretOffset(sourceEditor);
+ if (reversionFlag) {
+ anchorPosition = focusPosition;
+ focusPosition = range.x;
+ }
+ Node focusNode = getSourceNodeAt(focusPosition);
+ if (focusNode == null) {
+ return;
+ }
+ int focusOffset = getSourceNodeOffset(focusNode, focusPosition, extendFlag && !reversionFlag);
+ Node anchorNode = null;
+ int anchorOffset = 0;
+ if (extendFlag) {
+ anchorNode = getSourceNodeAt(anchorPosition);
+ anchorOffset = getSourceNodeOffset(anchorNode, anchorPosition, reversionFlag);
+ } else {
+ anchorNode = focusNode;
+ anchorOffset = focusOffset;
+ }
+
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println("sourceSelectionChanged"); //$NON-NLS-1$
+ System.out.println(" anchorNode: " + anchorNode.getNodeName() + " anchorOffset: " + anchorOffset); //$NON-NLS-1$ //$NON-NLS-2$
+ System.out.println(" focusNode: " + focusNode.getNodeName() + " focusOffset: " + focusOffset + " focusPosition: " + focusPosition); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ try{
+ if(anchorNode.getNodeType() == Node.TEXT_NODE || anchorNode.getNodeType() == Node.ATTRIBUTE_NODE){
+ String text;
+ if (anchorNode.getNodeType() == Node.TEXT_NODE) {
+ IndexedRegion region = (IndexedRegion)anchorNode;
+ text = sourceEditor.getTextViewer().getDocument().get(region.getStartOffset(), region.getEndOffset()-region.getStartOffset());
+ } else {
+ text = ((AttrImpl)anchorNode).getValueRegionText();
+ }
+ anchorOffset = TextUtil.visualPosition(text, anchorOffset);
+ }
+ if(focusNode.getNodeType() == Node.TEXT_NODE || focusNode.getNodeType() == Node.ATTRIBUTE_NODE){
+ IndexedRegion region = (IndexedRegion)focusNode;
+ String text;
+ if (focusNode.getNodeType() == Node.TEXT_NODE) {
+ text = sourceEditor.getTextViewer().getDocument().get(region.getStartOffset(), region.getEndOffset()-region.getStartOffset());
+ } else {
+ text = ((AttrImpl)focusNode).getValueRegionText();
+ }
+ focusOffset = TextUtil.visualPosition(text, focusOffset);
+ }
+ }catch(Exception ex){
+ VpePlugin.reportProblem(ex);
+ }
+
+ selectionBuilder.setVisualSelection(anchorNode, anchorOffset, focusNode, focusOffset, reversionFlag, showCaret);
+ }
+
+ public void sourceSelectionToVisualSelection(boolean showCaret) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ sourceSelectionChanged(showCaret);
+ switcher.stopActiveEditor();
+ }
+
+ // IModelLifecycleListener implementation
+ public void processPreModelEvent(ModelLifecycleEvent event) {
+ }
+
+ public void processPostModelEvent(ModelLifecycleEvent event) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (event.getType() == ModelLifecycleEvent.MODEL_RELEASED) {
+ if (VpeDebug.PRINT_SOURCE_MODEL_LIFECYCLE_EVENT) {
+ System.out.println(">>> processPostModelEvent: " + event.toString()); //$NON-NLS-1$
+ }
+ visualBuilder.setSelectionRectangle(null);
+ IStructuredModel model = event.getModel();
+ model.removeModelLifecycleListener(this);
+ IDOMModel sourceModel = (IDOMModel)getModel();
+ sourceModel.addModelLifecycleListener(this);
+ bundle.clearAll();
+ bundle.refresh();
+ visualBuilder.setSelectionRectangle(null);
+ IDOMDocument sourceDocument = sourceModel.getDocument();
+ visualBuilder.rebuildDom(sourceDocument);
+// pageContext.fireTaglibsChanged();
+ }
+ switcher.stopActiveEditor();
+ }
+
+ // EditorDomEventListener implementation
+ public void subtreeModified(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void nodeInserted(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ nsIDOMNode targetNode = mutationEvent.getRelatedNode();
+ if (!VpeVisualDomBuilder.isAnonElement(targetNode)) {
+ sourceBuilder.addNode(targetNode);
+ visualBuilder.resetPseudoElement(targetNode);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void nodeRemoved(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
+ if (!VpeVisualDomBuilder.isAnonElement(targetNode)) {
+ visualBuilder.setSelectionRectangle(null);
+ sourceBuilder.removeNode(targetNode);
+ visualBuilder.resetPseudoElement(targetNode);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void nodeRemovedFromDocument(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void nodeInsertedIntoDocument(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void attrModified(nsIDOMMutationEvent mutationEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void characterDataModified(nsIDOMMutationEvent mutationEvent) {
+
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MUTATION_EVENT) {
+ printVisualEvent(mutationEvent);
+ }
+ nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
+ sourceBuilder.setText(targetNode);
+ visualBuilder.resetPseudoElement(targetNode);
+ switcher.stopActiveEditor();
+ }
+
+ public void notifySelectionChanged(nsIDOMDocument doc, nsISelection selection, short reason) {
+ if (switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ mouseUpSelectionReasonFlag = (reason & nsISelectionListener.MOUSEUP_REASON) > 0;
+ if (mouseUpSelectionReasonFlag || reason == nsISelectionListener.NO_REASON || reason == nsISelectionListener.KEYPRESS_REASON || reason == nsISelectionListener.SELECTALL_REASON || (reason & nsISelectionListener.MOUSEDOWN_REASON) > 0) {
+ if (VpeDebug.PRINT_VISUAL_SELECTION_EVENT) {
+ System.out.println("<<< notifySelectionChanged: " + reason); //$NON-NLS-1$
+ }
+ selectionBuilder.setSelection(selection);
+ }
+ switcher.stopActiveEditor();
+ }
+ }
+
+
+ public void mouseDown(nsIDOMMouseEvent mouseEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ nsIDOMElement visualDragElement = selectionBuilder.getDragElement(mouseEvent);
+ if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
+ System.out.println("<<< mouseDown targetNode: " + visualNode.getNodeName() + " (" + visualNode + ") selectedElement: " + (visualDragElement != null ? visualDragElement.getNodeName() + " (" + visualDragElement + ")" : null)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ }
+ mouseDownSelectionFlag = false;
+
+ if (visualDragElement != null) {
+
+ //we shouldn't change selection when we click on <input type="text" /> element,
+ //because if we change after resizing the input element lost selection
+ if(!(HTML.TAG_INPUT.equalsIgnoreCase(visualDragElement.getNodeName())&&
+ HTML.ATTR_TEXT.equalsIgnoreCase(visualDragElement.getAttribute(HTML.ATTR_TYPE))
+ &&visualDragElement.getAttribute(HTML.ATTR_TYPE)!=null)) {
+
+ selectionBuilder.setVisualElementSelection(visualDragElement);
+ mouseDownSelectionFlag = true;
+ }
+ } else {
+ selectionBuilder.setCaretAtMouse(mouseEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void mouseUp(nsIDOMMouseEvent mouseEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
+ System.out.println("<<< mouseUp"); //$NON-NLS-1$
+ }
+ if (mouseDownSelectionFlag) {
+ mouseEvent.preventDefault();
+ mouseEvent.stopPropagation();
+ mouseDownSelectionFlag = false;
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void mouseClick(nsIDOMMouseEvent mouseEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
+
+ if (visualNode != null) {
+ if (!mouseUpSelectionReasonFlag) {
+ if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
+ System.out.println("<<< mouseClick visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ if (visualBuilder.isContentArea(visualNode)) {
+ selectionBuilder.setClickContentAreaSelection();
+ }
+ } else {
+ mouseUpSelectionReasonFlag = false;
+ }
+
+ if (visualBuilder.doToggle(VisualDomUtil.getTargetNode(mouseEvent))) {
+ selectionBuilder.setClickContentAreaSelection();
+ }
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void mouseDblClick(nsIDOMMouseEvent mouseEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
+ if (visualNode != null) {
+ if (!sourceBuilder.openBundleEditors(visualNode)) {
+ sourceBuilder.openIncludeEditor(visualNode);
+ }
+ if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
+ System.out.println("<<< mouseDblClick visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void mouseMove(nsIDOMMouseEvent mouseEvent) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
+ if (visualNode != null) {
+ if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
+ System.out.println("<<< mouseMove visualNode: " + visualNode.getNodeName() + " (" + visualNode + ")");
+ }
+ visualBuilder.setMoveCursor(mouseEvent);
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void keyPress(nsIDOMKeyEvent keyEvent) {
+ if (VpeDebug.PRINT_VISUAL_KEY_EVENT) {
+ System.out.println("<<< keyPress type: " + keyEvent.getType() + " Ctrl: " + keyEvent.getCtrlKey() + " Shift: " + keyEvent.getShiftKey() + " CharCode: " + keyEvent.getCharCode() + " KeyCode: " + keyEvent.getKeyCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ }
+
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ switcher.stopActiveEditor();
+ return;
+ }
+
+ visualEditor.hideResizer();
+ switcher.stopActiveEditor();
+
+
+ try {
+ if (visualKeyHandler.keyPressHandler(keyEvent)) {
+ switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL);
+ // Edward
+ sourceSelectionChanged(true);
+ visualSelectionController.setCaretEnabled(true);
+ switcher.stopActiveEditor();
+ } else {
+ //adding calls of core event handlers, for example 'CTR+H' or 'CTRL+M' event handler dialog
+ Event keyboardEvent = new Event ();
+ //widget where event occur
+ keyboardEvent.widget = xulRunnerEditor.getBrowser();
+
+ keyboardEvent.stateMask = (keyEvent.getAltKey() ? SWT.ALT : 0) | (keyEvent.getCtrlKey() ? SWT.CTRL : 0) | (keyEvent.getShiftKey() ? SWT.SHIFT : 0) | (keyEvent.getMetaKey() ? SWT.MOD1 : 0);
+ keyboardEvent.x=0;
+ keyboardEvent.y=0;
+ keyboardEvent.type=SWT.KeyDown;
+
+ if(keyEvent.getKeyCode()==0) {
+
+ keyboardEvent.keyCode=(int)keyEvent.getCharCode();
+ } else{
keyboardEvent.keyCode=(int)keyEvent.getKeyCode();
}
-
+
// JBIDE-1627
List<KeyStroke> possibleKeyStrokes = WorkbenchKeyboard.generatePossibleKeyStrokes(keyboardEvent);
IWorkbench iWorkbench = VpePlugin.getDefault().getWorkbench();
@@ -888,1534 +892,1533 @@
}
}
}
- }
-
- //sends xulrunner event to eclipse environment
- getXulRunnerEditor().getBrowser().notifyListeners(keyboardEvent.type, keyboardEvent);
-
- }
- } catch (Exception e) {
- VpePlugin.getPluginLog().logError(e);
- visualRefresh();
- }
-
- }
-
- public void elementResized(nsIDOMElement element, int resizerConstrains, int top, int left, int width, int height) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- visualEditor.hideResizer();
- switcher.stopActiveEditor();
-
- visualBuilder.resize(element, resizerConstrains, top, left, width, height);
- sourceSelectionChanged();
- }
-
- public void dragGesture(nsIDOMEvent domEvent) {
-
- nsIDOMMouseEvent mouseEvent = (nsIDOMMouseEvent) domEvent.queryInterface(nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID);
- boolean canDragFlag = canInnerDrag(mouseEvent);
- //start drag sessionvpe-element
- if(canDragFlag) {
- startDragSession(domEvent);
- }
- }
-
- private void createMenuForNode(Node node, MenuManager manager) {
- createMenuForNode(node, manager, false);
- }
-
- private void createMenuForNode(Node node, MenuManager manager, boolean topLevelFlag) {
- NodeActionManager.setTextNodeSplitter(null);
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- VpeElementMapping elementMapping = (VpeElementMapping)domMapping.getNodeMapping(node);
- if (elementMapping != null && elementMapping.getTemplate() != null) {
- manager.add(new VpeAction("<"+node.getNodeName()+"> Attributes", node) { //$NON-NLS-1$ //$NON-NLS-2$
- public void run() {
- showProperties(actionNode);
- }
- });
-
- if (!topLevelFlag) {
- manager.add(new VpeAction("Select This Tag", node) { //$NON-NLS-1$
- public void run() {
- selectionBuilder.setVisualSelection(actionNode,0,actionNode,0,false,true);
-
- }
- });
- }
- Node parent = node.getParentNode();
- if(parent != null && parent.getNodeType() == Node.ELEMENT_NODE){
- MenuManager menuManager = new MenuManager("Parent Tag"); //$NON-NLS-1$
- menuManager.setParent(manager);
- manager.add(menuManager);
- createMenuForNode(parent, menuManager);
- }
-
- manager.add(new Separator());
- }
- }
- NodeActionManager actionManager = new NodeActionManager(getModel(), null);
-
- if (node.getNodeType() == Node.TEXT_NODE) {
- Point range = sourceEditor.getTextViewer().getSelectedRange();
- TextNodeSplitterImpl splitter = new TextNodeSplitterImpl(range, (Text)node);
- NodeActionManager.setTextNodeSplitter(splitter);
- }
-
-
- if (actionManager != null) {
- StructuredSelection structuredSelection = new StructuredSelection(node);
- actionManager.fillContextMenuForVpe(manager, structuredSelection);
-
- }
-
- IContributionItem[] items = manager.getItems();
-
- for(int i=0;i< items.length;i++){
- if(items[i] instanceof MenuManager){
- MenuManager mm = (MenuManager)items[i];
- if(NodeActionManager.INSERT_AROUND_MENU.equals(mm.getMenuText())){
- listenContextMenu(mm, (IndexedRegion)node, AROUND_MENU);
- }else if(NodeActionManager.INSERT_BEFORE_MENU.equals(mm.getMenuText())){
- listenContextMenu(mm, (IndexedRegion)node, BEFORE_MENU);
- }else if(NodeActionManager.INSERT_AFTER_MENU.equals(mm.getMenuText())){
- listenContextMenu(mm, (IndexedRegion)node, AFTER_MENU);
- }
- }
- }
-
- manager.add(new Separator());
-
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- VpeElementMapping elementMapping = (VpeElementMapping)domMapping.getNodeMapping(node);
- if (elementMapping != null && elementMapping.getTemplate() != null && elementMapping.getTemplate().getType() == VpeHtmlTemplate.TYPE_ANY) {
- final VpeTemplate selectedTemplate = elementMapping.getTemplate();
-
- manager.add(new VpeAction("Template", node) { //$NON-NLS-1$
- public void run() {
- boolean isCorrectNS = pageContext.isCorrectNS(actionNode);
- VpeAnyData data = null;
- if (isCorrectNS) {
- data = selectedTemplate.getAnyData();
- data.setUri(pageContext.getSourceTaglibUri(actionNode));
- data.setName(actionNode.getNodeName());
- }
- data = editAnyData(sourceEditor, isCorrectNS, data);
- if (data != null && data.isChanged()) templateManager.setAnyTemplate(data);
- }
- });
-
- manager.add(new Separator());
- }
-
-
- manager.add(new VpeTextOperationAction("Cut", ActionFactory.CUT.getId(), (IndexedRegion)node)); //$NON-NLS-1$
- manager.add(new VpeTextOperationAction("Copy", ActionFactory.COPY.getId(), (IndexedRegion)node)); //$NON-NLS-1$
- manager.add(new VpeTextOperationAction("Paste", ActionFactory.PASTE.getId(), (IndexedRegion)node)); //$NON-NLS-1$
- }else if(node.getNodeType() == Node.TEXT_NODE){
- manager.add(new Action("Cut") { //$NON-NLS-1$
- public void run() {
- sourceEditor.getAction(ActionFactory.CUT.getId()).run();
- }
- });
- manager.add(new Action("Copy") { //$NON-NLS-1$
- public void run() {
- sourceEditor.getAction(ActionFactory.COPY.getId()).run();
- }
- });
- manager.add(new Action("Paste") { //$NON-NLS-1$
- public void run() {
- sourceEditor.getAction(ActionFactory.PASTE.getId()).run();
- }
- });
- }
- manager.add(new Separator());
-
- if (actionManager != null) {
- StructuredSelection structuredSelection = node.getNodeType() == Node.ELEMENT_NODE ? new StructuredSelection(node) : null;
- actionManager.addContextMenuForVpe(manager, structuredSelection);
- }
-
- if(node.getNodeType() == Node.ELEMENT_NODE){
- boolean stripEnable = false;
- NodeImpl impl = (NodeImpl)node;
- if(impl.isContainer()){
- NodeList list = impl.getChildNodes();
- if(list.getLength() > 0){
- if(list.getLength() == 1){
- Node child = list.item(0);
- if(child.getNodeType() == Node.TEXT_NODE){
- if("".equals(child.getNodeValue().trim()))stripEnable = false; //$NON-NLS-1$
- else stripEnable = true;
- }else stripEnable = true;
- }else stripEnable = true;
- }
- }
- if(stripEnable)
- manager.add(new VpeAction("Strip Tag", node) { //$NON-NLS-1$
- public void run() {
- Node parent = actionNode.getParentNode();
- if(parent != null){
- int index = ((NodeImpl)actionNode).getIndex();
- parent.removeChild(actionNode);
- NodeList children = actionNode.getChildNodes();
- int lengh = children.getLength();
- Node child;
- for(int i=0; i < lengh; i++){
- child = children.item(0);
- actionNode.removeChild(child);
- insertNode(parent, child, index++);
- }
- }
- }
-
- private void insertNode(Node parent, Node node, int index){
- Node oldNode=null;
- int childSize = parent.getChildNodes().getLength();
-
- if(index <= (childSize-1))oldNode = parent.getChildNodes().item(index);
- if(oldNode != null)parent.insertBefore(node, oldNode);
- else parent.appendChild(node);
- }
- });
- }
- if(node.getNodeType() == Node.TEXT_NODE){
- manager.add(new Action("Delete") { //$NON-NLS-1$
- public void run() {
- sourceEditor.getAction(ActionFactory.DELETE.getId()).run();
- }
- });
- }
-
- if (VpeDebug.VISUAL_CONTEXTMENU_DUMP_SOURCE) {
- manager.add(new Action("Dump Source") { //$NON-NLS-1$
- public void run() {
- DOMTreeDumper dumper = new DOMTreeDumper();
- dumper.dumpToStream(System.out, visualEditor.getDomDocument());
- }
- });
- }
-
- if (VpeDebug.VISUAL_CONTEXTMENU_DUMP_MAPPING) {
- manager.add(new Action("Dump Mapping") { //$NON-NLS-1$
- public void run() {
- printMapping();
- }
- });
- }
-
- if (VpeDebug.VISUAL_CONTEXTMENU_TEST) {
- manager.add(new VpeAction("Test", node) { //$NON-NLS-1$
- public void run() {
- test(actionNode);
- }
- });
- }
- }
-
- /**
- * Calls when on when browser receive context menu event.
- *
- * @param contextFlags -not used in this function, just for becouse this parametr
- * exist in nsIContextMenuListener
- * @param event event from browser used here
- * @param node where this event are occur
- */
- public void onShowContextMenu(long contextFlags, nsIDOMEvent event, nsIDOMNode node) {
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(event);
-
- if (visualNode != null) {
- Node selectedSourceNode = null;
- selectedSourceNode = selectionBuilder.setContextMenuSelection(visualNode);
- if (selectedSourceNode != null) {
-
- MenuManager menuManager = new MenuManager("#popup"); //$NON-NLS-1$
- final Menu contextMenu = menuManager.createContextMenu(visualEditor.getControl());
- contextMenu.addMenuListener(
- new MenuListener(){
- Menu menu = contextMenu;
- public void menuHidden(MenuEvent e) {
- Display.getCurrent().asyncExec(
- new Runnable() {
- public void run() {
- menu.dispose();
- }
- }
- );
- }
- public void menuShown(MenuEvent e) {
- }
- }
- );
- createMenuForNode(selectedSourceNode, menuManager, true);
-
- contextMenu.setVisible(true);
-
- }
- }
- }
-
-
- private VpeAnyData editAnyData(StructuredTextEditor sourceEditor, boolean isCorrectNS, VpeAnyData data) {
- Shell shell = sourceEditor.getEditorPart().getSite().getShell();
- if (isCorrectNS) {
- VpeEditAnyDialog editDialog = new VpeEditAnyDialog(shell, data);
- editDialog.open();
- } else {
- MessageBox message = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
- message.setMessage(VpeUIMessages.NAMESPACE_NOT_DEFINED);
- message.open();
- }
- return data;
- }
-
- // VpeTemplateListener implementation
- public void templateReloaded() {
- visualRefresh();
- }
-
- // VpeTaglibListener implementation
-// public void taglibPrefixChanged(String[] prefixs) {
-// if (VpeDebug.printSourceMutationEvent) {
-// String s = ""; //$NON-NLS-1$
-// for (int i = 0; i < prefixs.length; i++) {
-// if (i > 0) {
-// s += ", "; //$NON-NLS-1$
-// }
-// s += prefixs[i];
-// }
-// }
-// queryVisualRefresh = true;
-//// visualRefreshImpl();
-// }
-
- public void visualRefresh() {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- visualRefreshImpl();
- pageContext.fireTaglibsChanged();
-
- switcher.stopActiveEditor();
- }
-
- void visualRefreshImpl() {
- visualEditor.hideResizer();
- visualBuilder.setSelectionRectangle(null);
- IDOMModel sourceModel = (IDOMModel)getModel();
- if (sourceModel != null) {
- IDOMDocument sourceDocument = sourceModel.getDocument();
- visualBuilder.rebuildDom(sourceDocument);
- } else {
- visualBuilder.rebuildDom(null);
- }
- }
-
- public void preLongOperation() {
- switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL);
- }
-
- public void postLongOperation() {
- switcher.stopActiveEditor();
- visualRefresh();
- }
-
- // for debug
- private void printSourceEvent(INodeNotifier notifier, int eventType, Object feature, Object oldValue, Object newValue, int pos) {
- System.out.println(">>> eventType: " + INodeNotifier.EVENT_TYPE_STRINGS[eventType] + " pos: " + pos + " notifier: " + ((Node)notifier).getNodeName() + " hashCode: " + notifier.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- if (feature != null) {
- if (feature instanceof Node) {
- System.out.println(" feature: " + ((Node)feature).getNodeType() + " " + ((Node)feature).getNodeName() + " hashCode: " + feature.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else {
- System.out.println(" feature: " + feature); //$NON-NLS-1$
- }
- }
- if (oldValue != null) {
- if (oldValue instanceof Node) {
- System.out.println(" oldValue: " + ((Node)oldValue).getNodeName() + " hashCode: " + oldValue.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- System.out.println(" oldValue: " + oldValue); //$NON-NLS-1$
- }
- }
- if (newValue != null) {
- if (newValue instanceof Node) {
- System.out.println(" newValue: " + ((Node)newValue).getNodeName() + " hashCode: " + newValue.hashCode() + " " + ((Node)newValue).getNodeType()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else {
- System.out.println(" newValue: " + newValue); //$NON-NLS-1$
- }
- }
- }
-
- private void printVisualEvent(nsIDOMEvent event) {
- System.out.print("<<< " + event.getType()); //$NON-NLS-1$
-
- if (event instanceof nsIDOMMutationEvent) {
- nsIDOMMutationEvent mutationEvent = (nsIDOMMutationEvent)event;
-
- System.out.print(" EventPhase: " + mutationEvent.getEventPhase()); //$NON-NLS-1$
-
- nsIDOMNode relatedNode = mutationEvent.getRelatedNode();
- System.out.print(" RelatedNode: " + (relatedNode == null ? null : relatedNode.getNodeName())); //$NON-NLS-1$
-
- nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
- String name = targetNode != null ? targetNode.getNodeName() : null;
- System.out.print(" TargetNode: " + name + " (" + targetNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
- System.out.print(" PrevValue: " + mutationEvent.getPrevValue().trim()); //$NON-NLS-1$
- System.out.print(" NewValue: " + mutationEvent.getNewValue().trim()); //$NON-NLS-1$
- }
- System.out.println();
- }
-
- private void printMapping() {
- domMapping.printMapping();
- }
-
- private class ActiveEditorSwitcher {
- private static final int ACTIVE_EDITOR_CANNOT = 0;
- private static final int ACTIVE_EDITOR_NONE = 1;
- private static final int ACTIVE_EDITOR_SOURCE = 2;
- private static final int ACTIVE_EDITOR_VISUAL = 3;
-
- private int type = ACTIVE_EDITOR_CANNOT;
-
- private void initActiveEditor() {
- type = ACTIVE_EDITOR_NONE;
- }
-
- private void destroyActiveEditor() {
- type = ACTIVE_EDITOR_CANNOT;
- }
-
- private boolean startActiveEditor(int newType) {
- if (type == ACTIVE_EDITOR_NONE) {
- if( newType == ACTIVE_EDITOR_SOURCE &&
- editPart.getVisualMode() == VpeEditorPart.SOURCE_MODE) {
- return false;
- }
- type = newType;
- return true;
- } else {
- return false;
- }
- }
-
- private void stopActiveEditor() {
- onRefresh();
- type = ACTIVE_EDITOR_NONE;
- }
- }
-
- private void showProperties(Node node){
- ExtendedProperties p = createExtendedProperties(node);
- if(p != null) ExtendedPropertiesWizard.run(p);
- }
-
- ExtendedProperties createExtendedProperties(Node node) {
- try {
- Class c = ModelFeatureFactory.getInstance().getFeatureClass("org.jboss.tools.jst.jsp.outline.VpeProperties"); //$NON-NLS-1$
- return (ExtendedProperties)c.getDeclaredConstructor(new Class[]{Node.class}).newInstance(new Object[]{node});
- } catch (Exception e) {
- VpePlugin.reportProblem(e);
- return null;
- }
- }
-
-
- private void test(Node node) {
- }
-
- void refreshBundleValues() {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (bundle != null) {
- bundle.refresh();
- if (pageContext != null) {
- pageContext.refreshBundleValues();
- }
- }
- switcher.stopActiveEditor();
- }
-
- void refreshTemplates() {
- if (includeList.includesRefresh()) {
- visualRefresh();
- }
- if (templateManager != null) {
- templateManager.reload();
- }
- if (bundle != null) {
- bundle.refresh();
- if (pageContext != null) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- pageContext.refreshBundleValues();
- switcher.stopActiveEditor();
- }
- }
- }
-
- // implements XModelTreeListener
- public void nodeChanged(XModelTreeEvent event) {
- visualRefresh();
- }
-
- public void structureChanged(XModelTreeEvent event) {
- }
-
- private Node getSourceNodeAt(int offset) {
- if (sourceEditor != null && getModel() != null) {
- IndexedRegion node = getModel().getIndexedRegion(offset);
- if (node instanceof IDOMElement) {
- IDOMElement element = (IDOMElement)node;
- if (offset < element.getEndStartOffset()) {
- NamedNodeMap attrs = element.getAttributes();
- if (attrs != null) {
- for (int i = 0; i < attrs.getLength(); i++) {
- if (attrs.item(i) instanceof AttrImpl) {
- AttrImpl attr = (AttrImpl)attrs.item(i);
- if (getSourceAttributeOffset(attr, offset) != -1) {
- VpeElementMapping elementMapping = domMapping.getNearElementMapping(attr.getOwnerElement());
- if (elementMapping != null) {
- String[] atributeNames = elementMapping.getTemplate().getOutputAtributeNames();
- if (atributeNames != null && atributeNames.length > 0 && attr.getName().equalsIgnoreCase(atributeNames[0])) {
- return attr;
- }
- }
- }
- }
- }
- }
- }
- }
- if (node == null) {
- node = getModel().getIndexedRegion(offset - 1);
- }
- if (node instanceof Node) {
- return (Node) node;
- }
- }
- return null;
- }
-
- private int getSourceNodeOffset(Node node, int pos, boolean endFlag) {
- if (node == null) return 0;
- int start = ((IndexedRegion)node).getStartOffset();
- int end = ((IndexedRegion)node).getEndOffset();
-
- switch (node.getNodeType()) {
- case Node.ATTRIBUTE_NODE:
- if (node instanceof AttrImpl) {
- return getSourceAttributeOffset((AttrImpl)node, pos);
- }
- case Node.TEXT_NODE:
- if (pos < start) {
- return 0;
- } else if (pos > end) {
- return end - start;
- } else {
- return pos - start;
- }
- case Node.COMMENT_NODE:
- if (pos > end) {
- pos = end;
- }
- int offset = pos - start - 4;
- return offset < 0 ? 0 : offset;
- case Node.ELEMENT_NODE:
- ElementImpl element = (ElementImpl)node;
- if (element.isContainer()) {
- if (pos < element.getStartEndOffset()) {
- return 0;
- } else {
- return 1;
- }
- } else {
- return endFlag ? 1 : 0;
- }
- default:
- return endFlag ? 1 : 0;
- }
- }
-
- private int getSourceAttributeOffset(AttrImpl attr, int pos) {
- if (attr.getValueRegion() != null) {
- int start = attr.getValueRegionStartOffset();
- String value = attr.getValueRegionText();
- int len = value.length();
- if (pos >= start && pos <= start + len) {
- int offset = pos - start;
- if (len > 1 && value.charAt(0) == '"' && value.charAt(len - 1) == '"') {
- if (offset <= 0 || offset >= len) {
- return -1;
- }
- offset--;
- }
- return offset;
- }
- }
- return -1;
- }
-
- private int getSourceNodeOffset1(Node node, int pos, boolean endFlag) {
- if (node == null) return 0;
- int start = ((IndexedRegion)node).getStartOffset();
- int end = ((IndexedRegion)node).getEndOffset();
-
- switch (node.getNodeType()) {
- case Node.ATTRIBUTE_NODE:
- if (node instanceof AttrImpl) {
- AttrImpl attr = (AttrImpl)node;
- start = attr.getValueRegionStartOffset();
- end = start + attr.getValueRegion().getLength();
- int ret = 0;
- if (pos > end) {
- ret = end - start;
- } else {
- ret = pos - start;
- }
- if (ret > 0 && attr.getValueRegionText().charAt(0) == '"') {
- ret--;
- }
- return ret;
- }
- case Node.TEXT_NODE:
- if (pos < start) {
- return 0;
- } else if (pos > end) {
- return end - start;
- } else {
- return pos - start;
- }
- case Node.COMMENT_NODE:
- if (pos > end) {
- pos = end;
- }
- int offset = pos - start - 4;
- return offset < 0 ? 0 : offset;
- case Node.ELEMENT_NODE:
- ElementImpl element = (ElementImpl)node;
- if (element.isContainer()) {
- if (pos < element.getStartEndOffset()) {
- return 0;
- } else if (pos < element.getStartEndOffset()) {
- return 1;
- } else if (pos == element.getStartEndOffset()) {
- return 2;
- }
- } else {
- return endFlag ? 1 : 0;
- }
- default:
- return endFlag ? 1 : 0;
- }
- }
-
- private void listenContextMenu(MenuManager manager, IndexedRegion region, int type){
- MenuManager mm = new MyMenuManager("From Palette",true); //$NON-NLS-1$
- manager.add(mm);
- manager.addMenuListener(new VpeMenuListener(mm, region, type));
- }
-
- class VpeMenuListener implements IMenuListener{
- private MenuManager manager;
- private IndexedRegion region;
- private int type;
- private boolean loaded=false;
-
- public VpeMenuListener(MenuManager manager, IndexedRegion region, int type){
- this.manager = manager;
- this.region = region;
- this.type = type;
- }
- public void menuAboutToShow(IMenuManager m) {
- if(loaded)return;
- loaded=true;
- fillContextMenuFromPalette(manager, region, type);
- manager.getParent().update(true);
- }
- }
- private MenuManager fillContextMenuFromPalette(MenuManager manager, IndexedRegion region, int type){
- XModelObject model = ModelUtilities.getPreferenceModel().getByPath("%Palette%"); //$NON-NLS-1$
-
- XModelObject[] folders = model.getChildren();
- for(int i=0;i<folders.length;i++){
- if ("yes".equals(folders[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
- MenuManager mm = new MenuManager(folders[i].getAttributeValue("name")); //$NON-NLS-1$
- manager.add(mm);
- fillPaletteFolder(mm, region, folders[i], type);
- }
- return manager;
- }
-
- private void fillPaletteFolder(MenuManager menu, IndexedRegion region, XModelObject folder, int type){
- XModelObject[] groups = folder.getChildren();
- for(int i=0;i<groups.length;i++){
- if ("yes".equals(groups[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
- MenuManager mm = new MenuManager(groups[i].getAttributeValue("name")); //$NON-NLS-1$
- menu.add(mm);
- fillPaletteGroup(mm, region, groups[i], type);
- }
- }
-
- private void fillPaletteGroup(MenuManager menu, IndexedRegion region, XModelObject group, int type){
- XModelObject[] items = group.getChildren();
- String endText;
-
- for(int i=0;i<items.length;i++){
- if ("yes".equals(items[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
- endText = items[i].getAttributeValue("end text"); //$NON-NLS-1$
-
- if(type == AROUND_MENU && (endText == null || "".equals(endText))) continue; //$NON-NLS-1$
- createInsertAction(menu, region, items[i], type);
- }
- }
-
- private void createInsertAction(MenuManager menu, IndexedRegion region, XModelObject item, int type){
-
-
- XModelObject parent = item.getParent();
- String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
- String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
- String tagName = item.getAttributeValue("name"); //$NON-NLS-1$
- String[] texts = new String[]{"<"+tagName+">"}; //$NON-NLS-1$ //$NON-NLS-2$
- if(tagName.indexOf("taglib") < 0) //$NON-NLS-1$
- PaletteInsertHelper.applyPrefix(texts, sourceEditor, tagName, uri, defaultPrefix);
- tagName = texts[0];
-
- menu.add(new InsertAction(tagName, region, item, type));
- }
-
- class InsertAction extends Action{
- private XModelObject item;
- private int type;
- private IndexedRegion region;
-
- public InsertAction(String title, IndexedRegion region, XModelObject item, int type){
- super(title);
- this.item = item;
- this.type = type;
- this.region = region;
- }
- public void run(){
- try {
- String tagName = item.getAttributeValue("name"); //$NON-NLS-1$
-
- XModelObject parent = item.getParent();
- String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
- String libraryVersion = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_VERSION); //$NON-NLS-1$
- String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
- VpeSelectionProvider selProvider = new VpeSelectionProvider(region);
-
- String startText = "" + item.getAttributeValue("start text"); //$NON-NLS-1$ //$NON-NLS-2$
- String endText = "" + item.getAttributeValue("end text"); //$NON-NLS-1$ //$NON-NLS-2$
- if(type == AROUND_MENU){
- }else if(type == BEFORE_MENU){
- selProvider = new VpeSelectionProvider(region.getStartOffset());
- }else if(type == AFTER_MENU){
- selProvider = new VpeSelectionProvider(region.getEndOffset());
- }
-
- Properties p = new Properties();
- p.setProperty("tag name", tagName); //$NON-NLS-1$
- p.setProperty("start text", startText); //$NON-NLS-1$
- p.setProperty("end text", endText); //$NON-NLS-1$
- p.setProperty("automatically reformat tag body", "" + item.getAttributeValue("automatically reformat tag body")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- p.setProperty(URIConstants.LIBRARY_URI, uri);
- p.setProperty(URIConstants.LIBRARY_VERSION, libraryVersion);
- String addTaglib = item.getParent().getAttributeValue(TLDToPaletteHelper.ADD_TAGLIB);
- p.setProperty(URIConstants.DEFAULT_PREFIX, defaultPrefix);
- p.setProperty(PaletteInsertHelper.PROPOPERTY_ADD_TAGLIB, addTaglib);
- if(((Node)region).getNodeType() == Node.ELEMENT_NODE)
- p.put("selectionProvider", selProvider); //$NON-NLS-1$
- PaletteInsertHelper.insertIntoEditor(sourceEditor.getTextViewer(), p);
- } catch (Exception e) {
- VpePlugin.reportProblem(e);
- }
-
- }
-
- }
-
- class VpeSelectionProvider implements ISelectionProvider{
- VpeSelection selection;
-
- public VpeSelectionProvider(IndexedRegion region){
- selection = new VpeSelection(region);
- }
- public VpeSelectionProvider(int position){
- selection = new VpeSelection(position);
- }
- public VpeSelectionProvider(int offset, int length){
- selection = new VpeSelection(offset, length);
- }
-
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- }
- public ISelection getSelection() {
- return selection;
- }
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-
- }
- public void setSelection(ISelection selection) {
- }
- }
-
- class VpeSelection implements ITextSelection{
- String text=""; //$NON-NLS-1$
- int offset, length;
-
- public VpeSelection(int position){
- offset = position;
- length = 0;
- }
-
- public VpeSelection(int offset, int length){
- this.offset = offset;
- this.length = length;
- if (length > 0) {
- try{
- text = sourceEditor.getTextViewer().getDocument().get(offset, length);
- }catch(Exception ex){
- VpePlugin.reportProblem(ex);
- }
- }
- }
-
- public VpeSelection(IndexedRegion region){
- offset = region.getStartOffset();
- length = region.getEndOffset() - offset;
- try{
- text = sourceEditor.getTextViewer().getDocument().get(offset, length);
- }catch(Exception ex){
- VpePlugin.reportProblem(ex);
- }
- }
-
- public int getEndLine() {
- return 0;
- }
- public int getLength() {
- return length;
- }
- public int getOffset() {
- return offset;
- }
- public int getStartLine() {
- return 0;
- }
- public String getText() {
- return text;
- }
- public boolean isEmpty() {
- return false;
- }
-}
-
- class VpeAction extends Action{
- public Node actionNode;
- public VpeAction(String name, Node node){
- super(name);
- this.actionNode = node;
- }
- }
-
- class VpeTextOperationAction extends Action{
- private String id;
- private IndexedRegion region;
- public VpeTextOperationAction(String name, String id, IndexedRegion region){
- super(name);
- this.id = id;
- this.region = region;
- }
- public void run(){
- sourceEditor.getSelectionProvider().setSelection(new VpeSelection(region));
- sourceEditor.getAction(id).run();
- }
- }
-
- public void refreshExternalLinks() {
- pageContext.getVisualBuilder().refreshExternalLinks();
- }
-
- public IPath getPath() {
- if (editPart != null) {
- IEditorInput input = editPart.getEditorInput();
- if (input != null && input instanceof IFileEditorInput) {
- return ((IFileEditorInput)input).getFile().getFullPath();
- }
- }
- return null;
- }
-
- public void changed(Object source) {
- if(cssReferenceListListener == source) {
- pageContext.getVisualBuilder().refreshExternalLinks();
- } else if (absoluteFolderReferenceListListener == source ||
- relativeFolderReferenceListListener == source ||
- taglibReferenceListListener == source) {
- visualRefresh();
- }
- }
-
- public void dragEnter(nsIDOMEvent event) {
- if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
- System.out.println("<<<<<<<<<<<<<<<<<<<< DragEnter"); //$NON-NLS-1$
- }
- }
-
- public void dragExit(nsIDOMEvent event) {
- if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
- System.out.println("<<<<<<<<<<<<<<<<<<<< dragExit"); //$NON-NLS-1$
- }
- // TODO Sergey Vasilyev figure out with drag caret
-// xulRunnerEditor.hideDragCaret();
- }
-
- public void dragOver(nsIDOMEvent event) {
-
- visualBuilder.getDnd().dragOver(event, this);
-
- }
-
- public void _dragOver(nsIDOMEvent event) {
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
- return;
- }
- if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
- System.out.println("<<<<<<<<<<<<<<<<<<<< dragOver"); //$NON-NLS-1$
- }
-
-// browser.computeDropPosition(event);
-
- boolean canDrop = !xulRunnerEditor.isMozillaDragFlavor();
- if (canDrop) {
- Clipboard clipboard = new Clipboard(Display.getCurrent());
- canDrop = clipboard.getContents(ModelTransfer.getInstance()) != null;
- }
- if (canDrop) {
- canDrop = VpeDndUtil.isDropEnabled((IModelObjectEditorInput)sourceEditor.getEditorInput());
- }
- if (canDrop) {
- VpeVisualCaretInfo caretInfo = selectionBuilder.getVisualCaretInfo(event);
- canDrop = caretInfo.exist();
- if (canDrop) {
- caretInfo.showCaret();
- } else {
- caretInfo.hideCaret();
- }
- }
- if (!canDrop) {
- event.stopPropagation();
- event.preventDefault();
- }
- switcher.stopActiveEditor();
- }
-
- public void drop(nsIDOMEvent event) {
- if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
- System.out.println("<<< outerDrop"); //$NON-NLS-1$
- }
- event.preventDefault();
- }
-
- public boolean canInnerDrag(nsIDOMMouseEvent event) {
- onHideTooltip();
-
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print("<<<<<< canInnerDrag"); //$NON-NLS-1$
- }
- if (innerDragInfo != null) {
- innerDragInfo.Release();
- innerDragInfo = null;
- }
- boolean canDrag = false;
- VpeVisualInnerDragInfo dragInfo = selectionBuilder.getInnerDragInfo(event);
- if (dragInfo != null) {
- nsIDOMNode dragNode = dragInfo.getNode();
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print(" dragNode: " + dragNode.getNodeName() + "(" + dragNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- switch (dragNode.getNodeType()) {
- case nsIDOMNode.ELEMENT_NODE:
- canDrag = visualBuilder.canInnerDrag((nsIDOMElement)dragNode);
- case nsIDOMNode.TEXT_NODE:
- canDrag = visualBuilder.isTextEditable(dragNode);
- }
- if (canDrag) {
- VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(dragInfo);
- if (sourceInnerDragInfo.getNode() != null) {
- innerDragInfo = dragInfo;
- InnerDragBuffer.object = sourceInnerDragInfo.getNode();
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- InnerDragBuffer.object = null;
- }
- });
- } else {
- canDrag = false;
- }
- }
- if (!canDrag) {
- dragInfo.Release();
- }
- }
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println(" canDrag: " + canDrag); //$NON-NLS-1$
- }
- return canDrag;
- }
-
- VpeDropWindow dropWindow = null;
-
- public MozillaDropInfo canInnerDrop(nsIDOMMouseEvent event) {
- onHideTooltip();
-
- if(dropWindow.active) {
- if(!event.getAltKey()) {
- dropWindow.close();
- } else {
- return null;
- }
- }
- if(event.getAltKey()) {
- nsIDOMNode visualNode = VisualDomUtil.getTargetNode(event);
- Node sourceNode = domMapping.getNearSourceNode(visualNode);
- if(sourceNode != null) {
- dropWindow.active = true;
- dropWindow.setEventPosition(event.getScreenX(), event.getScreenY());
- dropWindow.setInitialTargetNode(sourceNode);
- dropWindow.open();
- event.stopPropagation();
- event.preventDefault();
- return null;
- }
- }
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print("<<<<<< canInnerDrop"); //$NON-NLS-1$
- }
- boolean canDrop = false;;
- nsIDOMNode caretParent = null;
- long caretOffset = 0;
- if (innerDragInfo != null) {
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(event);
- if (visualDropInfo.getDropContainer() != null) {
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print(" x: " + visualDropInfo.getMouseX() + " y: " + visualDropInfo.getMouseY() + //$NON-NLS-1$ //$NON-NLS-2$
- " container: " + visualDropInfo.getDropContainer().getNodeName() + //$NON-NLS-1$
- "(" + visualDropInfo.getDropContainer() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
- " parent: " + visualDropInfo.getDropContainer().getParentNode().getNodeName() + //$NON-NLS-1$
- "(" + visualDropInfo.getDropContainer().getParentNode() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
- " offset: " + visualDropInfo.getDropOffset()); //$NON-NLS-1$
- }
- VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(innerDragInfo);
- VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceInnerDragInfo.getNode(), visualDropInfo, true);
- canDrop = sourceDropInfo.canDrop();
- if (canDrop) {
- VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
- if (newVisualDropInfo != null) {
- visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
- caretParent = newVisualDropInfo.getDropContainer();
- caretOffset = newVisualDropInfo.getDropOffset();
- }
- }
- }
- visualDropInfo.Release();
- }
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println(" canDrop: " + canDrop); //$NON-NLS-1$
- }
- return new MozillaDropInfo(canDrop, caretParent, caretOffset);
- }
-
- public void innerDrop(nsIDOMMouseEvent event) {
- onHideTooltip();
-
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print("<<<<<< innerDrop"); //$NON-NLS-1$
- }
- if (innerDragInfo != null) {
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(event);
- if (visualDropInfo.getDropContainer() != null) {
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.print(" container: " + visualDropInfo.getDropContainer().getNodeName() + //$NON-NLS-1$
- "(" + visualDropInfo.getDropContainer() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
- " offset: " + visualDropInfo.getDropOffset()); //$NON-NLS-1$
- }
-
- VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(innerDragInfo);
- VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceInnerDragInfo.getNode(), visualDropInfo, true);
- if(sourceDropInfo.canDrop()){
- VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
- if (newVisualDropInfo != null) {
- visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
- sourceDropInfo.setTop(visualDropInfo.getMouseY());
- sourceDropInfo.setLeft(visualDropInfo.getMouseX());
- visualBuilder.innerDrop(sourceInnerDragInfo, sourceDropInfo);
- if (innerDragInfo != null) {
- innerDragInfo.Release();
- innerDragInfo = null;
- }
- }
- }
- }
- }
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println();
- }
- }
-
- public MozillaDropInfo canExternalDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
- InnerDragBuffer.object = null;
- onHideTooltip();
-
- if(dropWindow.active) {
- if(!mouseEvent.getAltKey()) {
- dropWindow.close();
- } else {
- return new MozillaDropInfo(false, null, 0);
- }
- }
- if(mouseEvent.getAltKey()) {
- nsIDOMEvent event = (nsIDOMEvent) mouseEvent.queryInterface(nsIDOMEvent.NS_IDOMEVENT_IID);
- nsIDOMNode visualNode = (nsIDOMNode) event.getTarget().queryInterface(nsIDOMNode.NS_IDOMNODE_IID);
- Node sourceNode = domMapping.getNearSourceNode(visualNode);
- if(sourceNode != null) {
- if(ModelTransfer.MODEL.equals(flavor)){ //$NON-NLS-1$
-// XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
-// InnerDragBuffer.object = object;
- } else {
- dropWindow.flavor = flavor;
- }
- dropWindow.active = true;
- dropWindow.setEventPosition(mouseEvent.getScreenX(), mouseEvent.getScreenY());
- dropWindow.setInitialTargetNode(sourceNode);
- dropWindow.open();
- mouseEvent.stopPropagation();
- mouseEvent.preventDefault();
- return new MozillaDropInfo(false, null, 0);
- }
- }
- boolean canDrop = false;
- nsIDOMNode caretParent = null;
- long caretOffset = 0;
-
- if(MODEL_FLAVOR.equals(flavor)){
- XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
- if(object.getFileType() == XModelObject.FILE && !TLDUtil.isTaglib(object)) {
- IFile f = (IFile)EclipseResourceUtil.getResource(object);
- canDrop = f != null;
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
- caretParent = visualDropInfo.getDropContainer();
- caretOffset = visualDropInfo.getDropOffset();
- } else {
- String tagname = getTagName(object);
- if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
- Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
- if (visualDropInfo.getDropContainer() != null) {
- VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
- canDrop = sourceDropInfo.canDrop();
- if (canDrop) {
- VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
- if (newVisualDropInfo != null) {
- visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
- caretParent = newVisualDropInfo.getDropContainer();
- caretOffset = newVisualDropInfo.getDropOffset();
- }
- }
- }
- visualDropInfo.Release();
- }
- }else if(XulRunnerEditor.TRANS_FLAVOR_kFileMime.equals(flavor) ||
- XulRunnerEditor.TRANS_FLAVOR_kURLMime.equals(flavor)) {
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
- caretParent = visualDropInfo.getDropContainer();
- caretOffset = visualDropInfo.getDropOffset();
- try {
- canDrop = true;
- } catch (Exception ex) {
- VpePlugin.reportProblem(ex);
- }
- }
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println(" canDrop: " + canDrop + (canDrop ? " container: " + caretParent.getNodeName() + " offset: " + caretOffset : "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- }
- return new MozillaDropInfo(canDrop, caretParent, caretOffset);
-
- }
-
- public VpeSourceInnerDropInfo canExternalDropMacro(XModelObject object, Node parentNode, int offset) {
- String tagname = getTagName(object);
- Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
- return visualBuilder.getSourceInnerDropInfo(sourceDragNode, parentNode, offset, false);
- }
-
- public void externalDropAny(final String flavor, final String data, final Point range, Node container) {
- if(flavor == null || flavor.length() == 0) return;
- IDropCommand dropCommand = DropCommandFactory.getInstance().getDropCommand(flavor, JSPTagProposalFactory.getInstance());
-
- boolean promptAttributes = "yes".equals(VpePreference.ALWAYS_REQUEST_FOR_ATTRIBUTE.getValue());
- dropCommand.getDefaultModel().setPromptForTagAttributesRequired(promptAttributes);
-
- dropCommand.execute(
- new DropData(
- flavor,
- data,
- getPageContext(),
- sourceEditor.getEditorInput(),
- (ISourceViewer)sourceEditor.getAdapter(ISourceViewer.class),
- new VpeSelectionProvider(range.x,range.y),
- container
- )
- );
- }
-
- private String getTagName(XModelObject object) {
- String tagname = object.getAttributeValue("name"); //$NON-NLS-1$
-
- XModelObject parent = object.getParent();
- String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
- String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
-
- String[] texts = new String[]{"<"+tagname+">"}; //$NON-NLS-1$ //$NON-NLS-2$
- PaletteInsertHelper.applyPrefix(texts, sourceEditor, tagname, uri, defaultPrefix);
- tagname = texts[0].substring(1,texts[0].length()-1);
-
- return tagname;
- }
-
- public void externalDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
- onHideTooltip();
-
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
- Point range = selectionBuilder.getSourceSelectionRangeAtVisualNode(visualDropInfo.getDropContainer(), (int)visualDropInfo.getDropOffset());
- VpeSourceInnerDropInfo sourceDropInfo = null;
-
- if(MODEL_FLAVOR.equals(flavor)){
- XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
- if(object.getFileType() == XModelObject.FILE && !TLDUtil.isTaglib(object)) {
- flavor = "application/x-moz-file"; //$NON-NLS-1$
- IFile f = (IFile)EclipseResourceUtil.getResource(object);
- try {
- data = f.getLocation().toFile().toURL().toString();
- } catch (Exception e) {
- VpePlugin.getPluginLog().logError(e);
- }
- } else {
- String tagname = getTagName(object);
- if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
- Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
- if (visualDropInfo.getDropContainer() != null) {
- sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
- range = selectionBuilder.getSourceSelectionRange(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
- }
- }
- }
-
- if (visualDropInfo.getDropContainer() != null) {
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println(" drop! container: " + visualDropInfo.getDropContainer().getNodeName()); //$NON-NLS-1$
- }
- externalDropAny(flavor, data, range, sourceDropInfo == null?null:sourceDropInfo.getContainer());
- }
- }
-
- public void onShowTooltip(int x, int y, final String text) {
-
- if (tip != null && !tip.isDisposed()) tip.dispose();
-
- Display display = visualEditor.getControl().getDisplay();
- Shell parent = visualEditor.getControl().getShell();
-
- tip = new Shell(parent, SWT.NO_FOCUS| SWT.ON_TOP);
- Color bckgColor = new Color(tip.getDisplay(), 255, 250, 236);
- tip.setBackground(bckgColor);
-
- Composite composite = tip;
- GridLayout layout= new GridLayout();
- layout.numColumns = 2;
- layout.marginHeight= 0;
- layout.marginWidth= 0;
- layout.verticalSpacing= 0;
- layout.horizontalSpacing= 0;
- composite.setLayout(layout);
- GridData gd= new GridData(GridData.FILL_BOTH);
- composite.setLayoutData(gd);
-
-
- final StyledText tipControlHeaderText = new StyledText(composite, SWT.MULTI | SWT.READ_ONLY);
-
- tipControlHeaderText.setForeground(bckgColor);
- tipControlHeaderText.setBackground(bckgColor);
-
- String formatText = text.trim();
-
- /** attributeString string containing the pairs attribute and it's value as one string*/
- String[] attributeString = formatText.split("\n"); //$NON-NLS-1$
- /** buffer string containing the attribute and the value in the different succeding string*/
- String[] buffer = attributeString[0].split(" "); //$NON-NLS-1$
-
- tipControlHeaderText.setText(buffer[0].toString());
-
- tipControlHeaderText.addLineStyleListener(
- new LineStyleListener() {
- public void lineGetStyle(LineStyleEvent event){
- Color color = new Color(tipControlHeaderText.getDisplay(), 201, 51, 40);
- if (event.lineOffset == 0) {
- StyleRange st = new StyleRange();
- st.fontStyle = SWT.BOLD;
- st.foreground = color;
- event.styles = new StyleRange[]{st};
- st.start = event.lineOffset;
- st.length = event.lineText.length();
- }
- }
- }
- );
-
- GridData gridData = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
- gridData.horizontalAlignment = GridData.FILL;
- gridData.horizontalSpan = 2;
- tipControlHeaderText.setLayoutData(gridData);
-
- StringBuffer tempAttr = new StringBuffer();
- StringBuffer tempValue = new StringBuffer();
-
- if (attributeString.length >= 2) {
- for (int i = 1; i < attributeString.length; i++) {
- buffer = attributeString[i].split(" ", 2); //$NON-NLS-1$
- if (i == 1) {
- tempAttr.append(buffer[0] + " "); //$NON-NLS-1$
- tempValue.append((buffer.length>=2?buffer[1]:"") + " "); //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- tempAttr.append("\n" + buffer[0] + " "); //$NON-NLS-1$ //$NON-NLS-2$
- tempValue.append(" \n" + (buffer.length>=2?buffer[1]:"") + " "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- }
-
- final StyledText tipControlAttributeText = new StyledText(composite,
- SWT.MULTI | SWT.READ_ONLY);
-
- tipControlAttributeText.setForeground(bckgColor);
- tipControlAttributeText.setBackground(bckgColor);
-
- tipControlAttributeText.setText(tempAttr.toString());
- tipControlAttributeText
- .addLineStyleListener(new LineStyleListener() {
- public void lineGetStyle(LineStyleEvent event) {
- Color color = new Color(tipControlHeaderText
- .getDisplay(), 42, 148, 0);
- StyleRange st = new StyleRange();
- st.start = event.lineOffset;
- st.length = event.lineText.length();
- st.foreground = color;
- st.fontStyle = SWT.NORMAL;
- event.styles = new StyleRange[] { st };
- }
- });
- GridData gridData1 = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
- gridData1.horizontalAlignment = GridData.FILL;
- tipControlAttributeText.setLayoutData(gridData1);
-
- final StyledText tipControlValueText = new StyledText(composite,
- SWT.MULTI | SWT.READ_ONLY);
-
- tipControlValueText.setBackground(bckgColor);
-
- tipControlValueText.setText(tempValue.toString());
-
-
-
- GridData gridData2 = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
- gridData2.horizontalAlignment = GridData.FILL;
- tipControlValueText.setLayoutData(gridData2);
- }
- /*
- * Bug in Mozilla embedded API. Tooltip coordinates are wrong for
- * elements inside an inline frame (IFrame tag). The workaround is
- * to position the tooltip based on the mouse cursor location.
- */
- Point point = display.getCursorLocation();
- /* Assuming cursor is 21x21 because this is the size of
- * the arrow cursor on Windows
- */
- point.y += 21;
- tip.setLocation(point);
- tip.pack();
- tip.setVisible(true);
- }
-
- public void onHideTooltip() {
- if (tip != null && !tip.isDisposed()) tip.dispose();
- tip = null;
- }
-
- public VpePageContext getPageContext() {
- return pageContext;
- }
-
- public StructuredTextEditor getSourceEditor() {
- return sourceEditor;
- }
-
- public FormatControllerManager getToolbarFormatControllerManager() {
- return toolbarFormatControllerManager;
- }
-
- public void setToolbarFormatControllerManager(FormatControllerManager formatControllerManager) {
- toolbarFormatControllerManager = formatControllerManager;
- }
- public void setSelectionBarController(SelectionBar selectionBar) {
- this.selectionBar = selectionBar;
- }
-
- public IStructuredModel getModel() {
- return sourceEditor.getModel();
- }
-
- public VpeDomMapping getDomMapping() {
- return domMapping;
- }
-
- public VpeIncludeList getIncludeList(){
- try {
- if(includeList == null)
- throw new Exception("includeList - NULL!!!"); //$NON-NLS-1$
- } catch (Exception e) {
- VpePlugin.getPluginLog().logError(e);
- }
- return includeList;
- }
-
- public void selectionChanged(SelectionChangedEvent event) {
- if (editPart.getVisualMode() != VpeEditorPart.SOURCE_MODE) {
- if(toolbarFormatControllerManager != null) toolbarFormatControllerManager.selectionChanged();
- }
-
- if(selectionBar != null) selectionBar.selectionChanged();
-
- if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
- return;
- }
- if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
- System.out.println(">>>>>>>>>>>>>> selectionChanged " + event.getSource()); //$NON-NLS-1$
- }
- sourceSelectionChanged();
- switcher.stopActiveEditor();
- }
-
- // nsIClipboardDragDropHooks implementation
- public void onPasteOrDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
- onHideTooltip();
-
- VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
- Point range = selectionBuilder.getSourceSelectionRangeAtVisualNode(visualDropInfo.getDropContainer(), (int)visualDropInfo.getDropOffset());
- VpeSourceInnerDropInfo sourceDropInfo = null;
-
- XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
-
- String tagname = getTagName(object);
- if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
- Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
- if (visualDropInfo.getDropContainer() != null) {
- sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
- range = selectionBuilder.getSourceSelectionRange(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
- }
-
- if (visualDropInfo.getDropContainer() != null) {
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out.println(" drop! container: " + visualDropInfo.getDropContainer().getNodeName()); //$NON-NLS-1$
- }
- final String finalFlavor = flavor;
- final String finalData = data;
- final Point finalRange = range;
- final Node finalDropContainer = sourceDropInfo == null ? null : sourceDropInfo.getContainer();
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- externalDropAny(finalFlavor, finalData, finalRange, finalDropContainer);
- }
- });
- }
- }
-
- public void drop(Node node, Node parentNode, int offset) {
- visualBuilder.innerDrop(node, parentNode, offset);
- }
-
- /* (non-Javadoc)
- * @see org.mozilla.interfaces.nsISupports#queryInterface(java.lang.String)
- */
- public nsISupports queryInterface(String arg0) {
- return Mozilla.getInstance().queryInterface(this, arg0);
- }
- /**
- * Calls when editor content should be refreshed
- */
- public void onRefresh() {
- //when we using separate thread to display selection rectangle
- //it's working better than without
- /*
- * HACK
- * We need wait some time while standart event will be handled
- * and in process event handles some components are repainted(like buttons)
- * and flasher are not repainted, so we should paint flasher
- */
-
-
- Display.getDefault().asyncExec(new Thread(){
- public void run(){
-
- getXulRunnerEditor().showSelectionRectangle();
- }
- });
-
- }
-
- /**
- * @return the xulRunnerEditor
- */
- public XulRunnerEditor getXulRunnerEditor() {
- return xulRunnerEditor;
- }
-
- /**
- * @param xulRunnerEditor the xulRunnerEditor to set
- */
- public void setXulRunnerEditor(XulRunnerEditor xulRunnerEditor) {
- this.xulRunnerEditor = xulRunnerEditor;
- }
-
- /**
- * Start drag session
- */
- public void startDragSession(nsIDOMEvent domEvent) {
-
- visualBuilder.getDnd().startDragSession(domEvent);
- }
-
- public void dragDrop(nsIDOMEvent domEvent) {
-
- visualBuilder.getDnd().dragDrop(domEvent,this);
- }
-
- /**
- * @return the selectionBuilder
- */
- public VpeSelectionBuilder getSelectionBuilder() {
- return selectionBuilder;
- }
-
- /**
- * @param selectionBuilder the selectionBuilder to set
- */
- public void setSelectionBuilder(VpeSelectionBuilder selectionBuilder) {
- this.selectionBuilder = selectionBuilder;
- }
-
-}
+ }
+ //sends xulrunner event to eclipse environment
+ getXulRunnerEditor().getBrowser().notifyListeners(keyboardEvent.type, keyboardEvent);
+
+ }
+ } catch (Exception e) {
+ VpePlugin.getPluginLog().logError(e);
+ visualRefresh();
+ }
+
+ }
+
+ public void elementResized(nsIDOMElement element, int resizerConstrains, int top, int left, int width, int height) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ visualEditor.hideResizer();
+ switcher.stopActiveEditor();
+
+ visualBuilder.resize(element, resizerConstrains, top, left, width, height);
+ sourceSelectionChanged();
+ }
+
+ public void dragGesture(nsIDOMEvent domEvent) {
+
+ nsIDOMMouseEvent mouseEvent = (nsIDOMMouseEvent) domEvent.queryInterface(nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID);
+ boolean canDragFlag = canInnerDrag(mouseEvent);
+ //start drag sessionvpe-element
+ if(canDragFlag) {
+ startDragSession(domEvent);
+ }
+ }
+
+ private void createMenuForNode(Node node, MenuManager manager) {
+ createMenuForNode(node, manager, false);
+ }
+
+ private void createMenuForNode(Node node, MenuManager manager, boolean topLevelFlag) {
+ NodeActionManager.setTextNodeSplitter(null);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ VpeElementMapping elementMapping = (VpeElementMapping)domMapping.getNodeMapping(node);
+ if (elementMapping != null && elementMapping.getTemplate() != null) {
+ manager.add(new VpeAction("<"+node.getNodeName()+"> Attributes", node) { //$NON-NLS-1$ //$NON-NLS-2$
+ public void run() {
+ showProperties(actionNode);
+ }
+ });
+
+ if (!topLevelFlag) {
+ manager.add(new VpeAction("Select This Tag", node) { //$NON-NLS-1$
+ public void run() {
+ selectionBuilder.setVisualSelection(actionNode,0,actionNode,0,false,true);
+
+ }
+ });
+ }
+ Node parent = node.getParentNode();
+ if(parent != null && parent.getNodeType() == Node.ELEMENT_NODE){
+ MenuManager menuManager = new MenuManager("Parent Tag"); //$NON-NLS-1$
+ menuManager.setParent(manager);
+ manager.add(menuManager);
+ createMenuForNode(parent, menuManager);
+ }
+
+ manager.add(new Separator());
+ }
+ }
+ NodeActionManager actionManager = new NodeActionManager(getModel(), null);
+
+ if (node.getNodeType() == Node.TEXT_NODE) {
+ Point range = sourceEditor.getTextViewer().getSelectedRange();
+ TextNodeSplitterImpl splitter = new TextNodeSplitterImpl(range, (Text)node);
+ NodeActionManager.setTextNodeSplitter(splitter);
+ }
+
+
+ if (actionManager != null) {
+ StructuredSelection structuredSelection = new StructuredSelection(node);
+ actionManager.fillContextMenuForVpe(manager, structuredSelection);
+
+ }
+
+ IContributionItem[] items = manager.getItems();
+
+ for(int i=0;i< items.length;i++){
+ if(items[i] instanceof MenuManager){
+ MenuManager mm = (MenuManager)items[i];
+ if(NodeActionManager.INSERT_AROUND_MENU.equals(mm.getMenuText())){
+ listenContextMenu(mm, (IndexedRegion)node, AROUND_MENU);
+ }else if(NodeActionManager.INSERT_BEFORE_MENU.equals(mm.getMenuText())){
+ listenContextMenu(mm, (IndexedRegion)node, BEFORE_MENU);
+ }else if(NodeActionManager.INSERT_AFTER_MENU.equals(mm.getMenuText())){
+ listenContextMenu(mm, (IndexedRegion)node, AFTER_MENU);
+ }
+ }
+ }
+
+ manager.add(new Separator());
+
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ VpeElementMapping elementMapping = (VpeElementMapping)domMapping.getNodeMapping(node);
+ if (elementMapping != null && elementMapping.getTemplate() != null && elementMapping.getTemplate().getType() == VpeHtmlTemplate.TYPE_ANY) {
+ final VpeTemplate selectedTemplate = elementMapping.getTemplate();
+ //TODO Max Areshkau JBIDE-788 Fix That
+// manager.add(new VpeAction("Template", node) { //$NON-NLS-1$
+// public void run() {
+// boolean isCorrectNS = pageContext.isCorrectNS(actionNode);
+// VpeAnyData data = null;
+// if (isCorrectNS) {
+// data = selectedTemplate.getAnyData();
+// data.setUri(pageContext.getSourceTaglibUri(actionNode));
+// data.setName(actionNode.getNodeName());
+// }
+// data = editAnyData(sourceEditor, isCorrectNS, data);
+// if (data != null && data.isChanged()) templateManager.setAnyTemplate(data);
+// }
+// });
+
+ manager.add(new Separator());
+ }
+
+
+ manager.add(new VpeTextOperationAction("Cut", ActionFactory.CUT.getId(), (IndexedRegion)node)); //$NON-NLS-1$
+ manager.add(new VpeTextOperationAction("Copy", ActionFactory.COPY.getId(), (IndexedRegion)node)); //$NON-NLS-1$
+ manager.add(new VpeTextOperationAction("Paste", ActionFactory.PASTE.getId(), (IndexedRegion)node)); //$NON-NLS-1$
+ }else if(node.getNodeType() == Node.TEXT_NODE){
+ manager.add(new Action("Cut") { //$NON-NLS-1$
+ public void run() {
+ sourceEditor.getAction(ActionFactory.CUT.getId()).run();
+ }
+ });
+ manager.add(new Action("Copy") { //$NON-NLS-1$
+ public void run() {
+ sourceEditor.getAction(ActionFactory.COPY.getId()).run();
+ }
+ });
+ manager.add(new Action("Paste") { //$NON-NLS-1$
+ public void run() {
+ sourceEditor.getAction(ActionFactory.PASTE.getId()).run();
+ }
+ });
+ }
+ manager.add(new Separator());
+
+ if (actionManager != null) {
+ StructuredSelection structuredSelection = node.getNodeType() == Node.ELEMENT_NODE ? new StructuredSelection(node) : null;
+ actionManager.addContextMenuForVpe(manager, structuredSelection);
+ }
+
+ if(node.getNodeType() == Node.ELEMENT_NODE){
+ boolean stripEnable = false;
+ NodeImpl impl = (NodeImpl)node;
+ if(impl.isContainer()){
+ NodeList list = impl.getChildNodes();
+ if(list.getLength() > 0){
+ if(list.getLength() == 1){
+ Node child = list.item(0);
+ if(child.getNodeType() == Node.TEXT_NODE){
+ if("".equals(child.getNodeValue().trim()))stripEnable = false; //$NON-NLS-1$
+ else stripEnable = true;
+ }else stripEnable = true;
+ }else stripEnable = true;
+ }
+ }
+ if(stripEnable)
+ manager.add(new VpeAction("Strip Tag", node) { //$NON-NLS-1$
+ public void run() {
+ Node parent = actionNode.getParentNode();
+ if(parent != null){
+ int index = ((NodeImpl)actionNode).getIndex();
+ parent.removeChild(actionNode);
+ NodeList children = actionNode.getChildNodes();
+ int lengh = children.getLength();
+ Node child;
+ for(int i=0; i < lengh; i++){
+ child = children.item(0);
+ actionNode.removeChild(child);
+ insertNode(parent, child, index++);
+ }
+ }
+ }
+
+ private void insertNode(Node parent, Node node, int index){
+ Node oldNode=null;
+ int childSize = parent.getChildNodes().getLength();
+
+ if(index <= (childSize-1))oldNode = parent.getChildNodes().item(index);
+ if(oldNode != null)parent.insertBefore(node, oldNode);
+ else parent.appendChild(node);
+ }
+ });
+ }
+ if(node.getNodeType() == Node.TEXT_NODE){
+ manager.add(new Action("Delete") { //$NON-NLS-1$
+ public void run() {
+ sourceEditor.getAction(ActionFactory.DELETE.getId()).run();
+ }
+ });
+ }
+
+ if (VpeDebug.VISUAL_CONTEXTMENU_DUMP_SOURCE) {
+ manager.add(new Action("Dump Source") { //$NON-NLS-1$
+ public void run() {
+ DOMTreeDumper dumper = new DOMTreeDumper();
+ dumper.dumpToStream(System.out, visualEditor.getDomDocument());
+ }
+ });
+ }
+
+ if (VpeDebug.VISUAL_CONTEXTMENU_DUMP_MAPPING) {
+ manager.add(new Action("Dump Mapping") { //$NON-NLS-1$
+ public void run() {
+ printMapping();
+ }
+ });
+ }
+
+ if (VpeDebug.VISUAL_CONTEXTMENU_TEST) {
+ manager.add(new VpeAction("Test", node) { //$NON-NLS-1$
+ public void run() {
+ test(actionNode);
+ }
+ });
+ }
+ }
+
+ /**
+ * Calls when on when browser receive context menu event.
+ *
+ * @param contextFlags -not used in this function, just for becouse this parametr
+ * exist in nsIContextMenuListener
+ * @param event event from browser used here
+ * @param node where this event are occur
+ */
+ public void onShowContextMenu(long contextFlags, nsIDOMEvent event, nsIDOMNode node) {
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(event);
+
+ if (visualNode != null) {
+ Node selectedSourceNode = null;
+ selectedSourceNode = selectionBuilder.setContextMenuSelection(visualNode);
+ if (selectedSourceNode != null) {
+
+ MenuManager menuManager = new MenuManager("#popup"); //$NON-NLS-1$
+ final Menu contextMenu = menuManager.createContextMenu(visualEditor.getControl());
+ contextMenu.addMenuListener(
+ new MenuListener(){
+ Menu menu = contextMenu;
+ public void menuHidden(MenuEvent e) {
+ Display.getCurrent().asyncExec(
+ new Runnable() {
+ public void run() {
+ menu.dispose();
+ }
+ }
+ );
+ }
+ public void menuShown(MenuEvent e) {
+ }
+ }
+ );
+ createMenuForNode(selectedSourceNode, menuManager, true);
+
+ contextMenu.setVisible(true);
+
+ }
+ }
+ }
+
+
+ private VpeAnyData editAnyData(StructuredTextEditor sourceEditor, boolean isCorrectNS, VpeAnyData data) {
+ Shell shell = sourceEditor.getEditorPart().getSite().getShell();
+ if (isCorrectNS) {
+ VpeEditAnyDialog editDialog = new VpeEditAnyDialog(shell, data);
+ editDialog.open();
+ } else {
+ MessageBox message = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
+ message.setMessage(VpeUIMessages.NAMESPACE_NOT_DEFINED);
+ message.open();
+ }
+ return data;
+ }
+
+ // VpeTemplateListener implementation
+ public void templateReloaded() {
+ visualRefresh();
+ }
+
+ // VpeTaglibListener implementation
+// public void taglibPrefixChanged(String[] prefixs) {
+// if (VpeDebug.printSourceMutationEvent) {
+// String s = ""; //$NON-NLS-1$
+// for (int i = 0; i < prefixs.length; i++) {
+// if (i > 0) {
+// s += ", "; //$NON-NLS-1$
+// }
+// s += prefixs[i];
+// }
+// }
+// queryVisualRefresh = true;
+//// visualRefreshImpl();
+// }
+
+ public void visualRefresh() {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ visualRefreshImpl();
+// pageContext.fireTaglibsChanged();
+
+ switcher.stopActiveEditor();
+ }
+
+ void visualRefreshImpl() {
+ visualEditor.hideResizer();
+ visualBuilder.setSelectionRectangle(null);
+ IDOMModel sourceModel = (IDOMModel)getModel();
+ if (sourceModel != null) {
+ IDOMDocument sourceDocument = sourceModel.getDocument();
+ visualBuilder.rebuildDom(sourceDocument);
+ } else {
+ visualBuilder.rebuildDom(null);
+ }
+ }
+
+ public void preLongOperation() {
+ switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL);
+ }
+
+ public void postLongOperation() {
+ switcher.stopActiveEditor();
+ visualRefresh();
+ }
+
+ // for debug
+ private void printSourceEvent(INodeNotifier notifier, int eventType, Object feature, Object oldValue, Object newValue, int pos) {
+ System.out.println(">>> eventType: " + INodeNotifier.EVENT_TYPE_STRINGS[eventType] + " pos: " + pos + " notifier: " + ((Node)notifier).getNodeName() + " hashCode: " + notifier.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ if (feature != null) {
+ if (feature instanceof Node) {
+ System.out.println(" feature: " + ((Node)feature).getNodeType() + " " + ((Node)feature).getNodeName() + " hashCode: " + feature.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ } else {
+ System.out.println(" feature: " + feature); //$NON-NLS-1$
+ }
+ }
+ if (oldValue != null) {
+ if (oldValue instanceof Node) {
+ System.out.println(" oldValue: " + ((Node)oldValue).getNodeName() + " hashCode: " + oldValue.hashCode()); //$NON-NLS-1$ //$NON-NLS-2$
+ } else {
+ System.out.println(" oldValue: " + oldValue); //$NON-NLS-1$
+ }
+ }
+ if (newValue != null) {
+ if (newValue instanceof Node) {
+ System.out.println(" newValue: " + ((Node)newValue).getNodeName() + " hashCode: " + newValue.hashCode() + " " + ((Node)newValue).getNodeType()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ } else {
+ System.out.println(" newValue: " + newValue); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private void printVisualEvent(nsIDOMEvent event) {
+ System.out.print("<<< " + event.getType()); //$NON-NLS-1$
+
+ if (event instanceof nsIDOMMutationEvent) {
+ nsIDOMMutationEvent mutationEvent = (nsIDOMMutationEvent)event;
+
+ System.out.print(" EventPhase: " + mutationEvent.getEventPhase()); //$NON-NLS-1$
+
+ nsIDOMNode relatedNode = mutationEvent.getRelatedNode();
+ System.out.print(" RelatedNode: " + (relatedNode == null ? null : relatedNode.getNodeName())); //$NON-NLS-1$
+
+ nsIDOMNode targetNode = VisualDomUtil.getTargetNode(mutationEvent);
+ String name = targetNode != null ? targetNode.getNodeName() : null;
+ System.out.print(" TargetNode: " + name + " (" + targetNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+ System.out.print(" PrevValue: " + mutationEvent.getPrevValue().trim()); //$NON-NLS-1$
+ System.out.print(" NewValue: " + mutationEvent.getNewValue().trim()); //$NON-NLS-1$
+ }
+ System.out.println();
+ }
+
+ private void printMapping() {
+ domMapping.printMapping();
+ }
+
+ private class ActiveEditorSwitcher {
+ private static final int ACTIVE_EDITOR_CANNOT = 0;
+ private static final int ACTIVE_EDITOR_NONE = 1;
+ private static final int ACTIVE_EDITOR_SOURCE = 2;
+ private static final int ACTIVE_EDITOR_VISUAL = 3;
+
+ private int type = ACTIVE_EDITOR_CANNOT;
+
+ private void initActiveEditor() {
+ type = ACTIVE_EDITOR_NONE;
+ }
+
+ private void destroyActiveEditor() {
+ type = ACTIVE_EDITOR_CANNOT;
+ }
+
+ private boolean startActiveEditor(int newType) {
+ if (type == ACTIVE_EDITOR_NONE) {
+ if( newType == ACTIVE_EDITOR_SOURCE &&
+ editPart.getVisualMode() == VpeEditorPart.SOURCE_MODE) {
+ return false;
+ }
+ type = newType;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private void stopActiveEditor() {
+ onRefresh();
+ type = ACTIVE_EDITOR_NONE;
+ }
+ }
+
+ private void showProperties(Node node){
+ ExtendedProperties p = createExtendedProperties(node);
+ if(p != null) ExtendedPropertiesWizard.run(p);
+ }
+
+ ExtendedProperties createExtendedProperties(Node node) {
+ try {
+ Class c = ModelFeatureFactory.getInstance().getFeatureClass("org.jboss.tools.jst.jsp.outline.VpeProperties"); //$NON-NLS-1$
+ return (ExtendedProperties)c.getDeclaredConstructor(new Class[]{Node.class}).newInstance(new Object[]{node});
+ } catch (Exception e) {
+ VpePlugin.reportProblem(e);
+ return null;
+ }
+ }
+
+
+ private void test(Node node) {
+ }
+
+ void refreshBundleValues() {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (bundle != null) {
+ bundle.refresh();
+ if (pageContext != null) {
+ pageContext.refreshBundleValues();
+ }
+ }
+ switcher.stopActiveEditor();
+ }
+
+ void refreshTemplates() {
+ if (includeList.includesRefresh()) {
+ visualRefresh();
+ }
+ if (templateManager != null) {
+ templateManager.reload();
+ }
+ if (bundle != null) {
+ bundle.refresh();
+ if (pageContext != null) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ pageContext.refreshBundleValues();
+ switcher.stopActiveEditor();
+ }
+ }
+ }
+
+ // implements XModelTreeListener
+ public void nodeChanged(XModelTreeEvent event) {
+ visualRefresh();
+ }
+
+ public void structureChanged(XModelTreeEvent event) {
+ }
+
+ private Node getSourceNodeAt(int offset) {
+ if (sourceEditor != null && getModel() != null) {
+ IndexedRegion node = getModel().getIndexedRegion(offset);
+ if (node instanceof IDOMElement) {
+ IDOMElement element = (IDOMElement)node;
+ if (offset < element.getEndStartOffset()) {
+ NamedNodeMap attrs = element.getAttributes();
+ if (attrs != null) {
+ for (int i = 0; i < attrs.getLength(); i++) {
+ if (attrs.item(i) instanceof AttrImpl) {
+ AttrImpl attr = (AttrImpl)attrs.item(i);
+ if (getSourceAttributeOffset(attr, offset) != -1) {
+ VpeElementMapping elementMapping = domMapping.getNearElementMapping(attr.getOwnerElement());
+ if (elementMapping != null) {
+ String[] atributeNames = elementMapping.getTemplate().getOutputAtributeNames();
+ if (atributeNames != null && atributeNames.length > 0 && attr.getName().equalsIgnoreCase(atributeNames[0])) {
+ return attr;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if (node == null) {
+ node = getModel().getIndexedRegion(offset - 1);
+ }
+ if (node instanceof Node) {
+ return (Node) node;
+ }
+ }
+ return null;
+ }
+
+ private int getSourceNodeOffset(Node node, int pos, boolean endFlag) {
+ if (node == null) return 0;
+ int start = ((IndexedRegion)node).getStartOffset();
+ int end = ((IndexedRegion)node).getEndOffset();
+
+ switch (node.getNodeType()) {
+ case Node.ATTRIBUTE_NODE:
+ if (node instanceof AttrImpl) {
+ return getSourceAttributeOffset((AttrImpl)node, pos);
+ }
+ case Node.TEXT_NODE:
+ if (pos < start) {
+ return 0;
+ } else if (pos > end) {
+ return end - start;
+ } else {
+ return pos - start;
+ }
+ case Node.COMMENT_NODE:
+ if (pos > end) {
+ pos = end;
+ }
+ int offset = pos - start - 4;
+ return offset < 0 ? 0 : offset;
+ case Node.ELEMENT_NODE:
+ ElementImpl element = (ElementImpl)node;
+ if (element.isContainer()) {
+ if (pos < element.getStartEndOffset()) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else {
+ return endFlag ? 1 : 0;
+ }
+ default:
+ return endFlag ? 1 : 0;
+ }
+ }
+
+ private int getSourceAttributeOffset(AttrImpl attr, int pos) {
+ if (attr.getValueRegion() != null) {
+ int start = attr.getValueRegionStartOffset();
+ String value = attr.getValueRegionText();
+ int len = value.length();
+ if (pos >= start && pos <= start + len) {
+ int offset = pos - start;
+ if (len > 1 && value.charAt(0) == '"' && value.charAt(len - 1) == '"') {
+ if (offset <= 0 || offset >= len) {
+ return -1;
+ }
+ offset--;
+ }
+ return offset;
+ }
+ }
+ return -1;
+ }
+
+ private int getSourceNodeOffset1(Node node, int pos, boolean endFlag) {
+ if (node == null) return 0;
+ int start = ((IndexedRegion)node).getStartOffset();
+ int end = ((IndexedRegion)node).getEndOffset();
+
+ switch (node.getNodeType()) {
+ case Node.ATTRIBUTE_NODE:
+ if (node instanceof AttrImpl) {
+ AttrImpl attr = (AttrImpl)node;
+ start = attr.getValueRegionStartOffset();
+ end = start + attr.getValueRegion().getLength();
+ int ret = 0;
+ if (pos > end) {
+ ret = end - start;
+ } else {
+ ret = pos - start;
+ }
+ if (ret > 0 && attr.getValueRegionText().charAt(0) == '"') {
+ ret--;
+ }
+ return ret;
+ }
+ case Node.TEXT_NODE:
+ if (pos < start) {
+ return 0;
+ } else if (pos > end) {
+ return end - start;
+ } else {
+ return pos - start;
+ }
+ case Node.COMMENT_NODE:
+ if (pos > end) {
+ pos = end;
+ }
+ int offset = pos - start - 4;
+ return offset < 0 ? 0 : offset;
+ case Node.ELEMENT_NODE:
+ ElementImpl element = (ElementImpl)node;
+ if (element.isContainer()) {
+ if (pos < element.getStartEndOffset()) {
+ return 0;
+ } else if (pos < element.getStartEndOffset()) {
+ return 1;
+ } else if (pos == element.getStartEndOffset()) {
+ return 2;
+ }
+ } else {
+ return endFlag ? 1 : 0;
+ }
+ default:
+ return endFlag ? 1 : 0;
+ }
+ }
+
+ private void listenContextMenu(MenuManager manager, IndexedRegion region, int type){
+ MenuManager mm = new MyMenuManager("From Palette",true); //$NON-NLS-1$
+ manager.add(mm);
+ manager.addMenuListener(new VpeMenuListener(mm, region, type));
+ }
+
+ class VpeMenuListener implements IMenuListener{
+ private MenuManager manager;
+ private IndexedRegion region;
+ private int type;
+ private boolean loaded=false;
+
+ public VpeMenuListener(MenuManager manager, IndexedRegion region, int type){
+ this.manager = manager;
+ this.region = region;
+ this.type = type;
+ }
+ public void menuAboutToShow(IMenuManager m) {
+ if(loaded)return;
+ loaded=true;
+ fillContextMenuFromPalette(manager, region, type);
+ manager.getParent().update(true);
+ }
+ }
+ private MenuManager fillContextMenuFromPalette(MenuManager manager, IndexedRegion region, int type){
+ XModelObject model = ModelUtilities.getPreferenceModel().getByPath("%Palette%"); //$NON-NLS-1$
+
+ XModelObject[] folders = model.getChildren();
+ for(int i=0;i<folders.length;i++){
+ if ("yes".equals(folders[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
+ MenuManager mm = new MenuManager(folders[i].getAttributeValue("name")); //$NON-NLS-1$
+ manager.add(mm);
+ fillPaletteFolder(mm, region, folders[i], type);
+ }
+ return manager;
+ }
+
+ private void fillPaletteFolder(MenuManager menu, IndexedRegion region, XModelObject folder, int type){
+ XModelObject[] groups = folder.getChildren();
+ for(int i=0;i<groups.length;i++){
+ if ("yes".equals(groups[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
+ MenuManager mm = new MenuManager(groups[i].getAttributeValue("name")); //$NON-NLS-1$
+ menu.add(mm);
+ fillPaletteGroup(mm, region, groups[i], type);
+ }
+ }
+
+ private void fillPaletteGroup(MenuManager menu, IndexedRegion region, XModelObject group, int type){
+ XModelObject[] items = group.getChildren();
+ String endText;
+
+ for(int i=0;i<items.length;i++){
+ if ("yes".equals(items[i].getAttributeValue("hidden"))) continue; //$NON-NLS-1$ //$NON-NLS-2$
+ endText = items[i].getAttributeValue("end text"); //$NON-NLS-1$
+
+ if(type == AROUND_MENU && (endText == null || "".equals(endText))) continue; //$NON-NLS-1$
+ createInsertAction(menu, region, items[i], type);
+ }
+ }
+
+ private void createInsertAction(MenuManager menu, IndexedRegion region, XModelObject item, int type){
+
+
+ XModelObject parent = item.getParent();
+ String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
+ String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
+ String tagName = item.getAttributeValue("name"); //$NON-NLS-1$
+ String[] texts = new String[]{"<"+tagName+">"}; //$NON-NLS-1$ //$NON-NLS-2$
+ if(tagName.indexOf("taglib") < 0) //$NON-NLS-1$
+ PaletteInsertHelper.applyPrefix(texts, sourceEditor, tagName, uri, defaultPrefix);
+ tagName = texts[0];
+
+ menu.add(new InsertAction(tagName, region, item, type));
+ }
+
+ class InsertAction extends Action{
+ private XModelObject item;
+ private int type;
+ private IndexedRegion region;
+
+ public InsertAction(String title, IndexedRegion region, XModelObject item, int type){
+ super(title);
+ this.item = item;
+ this.type = type;
+ this.region = region;
+ }
+ public void run(){
+ try {
+ String tagName = item.getAttributeValue("name"); //$NON-NLS-1$
+
+ XModelObject parent = item.getParent();
+ String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
+ String libraryVersion = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_VERSION); //$NON-NLS-1$
+ String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
+ VpeSelectionProvider selProvider = new VpeSelectionProvider(region);
+
+ String startText = "" + item.getAttributeValue("start text"); //$NON-NLS-1$ //$NON-NLS-2$
+ String endText = "" + item.getAttributeValue("end text"); //$NON-NLS-1$ //$NON-NLS-2$
+ if(type == AROUND_MENU){
+ }else if(type == BEFORE_MENU){
+ selProvider = new VpeSelectionProvider(region.getStartOffset());
+ }else if(type == AFTER_MENU){
+ selProvider = new VpeSelectionProvider(region.getEndOffset());
+ }
+
+ Properties p = new Properties();
+ p.setProperty("tag name", tagName); //$NON-NLS-1$
+ p.setProperty("start text", startText); //$NON-NLS-1$
+ p.setProperty("end text", endText); //$NON-NLS-1$
+ p.setProperty("automatically reformat tag body", "" + item.getAttributeValue("automatically reformat tag body")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ p.setProperty(URIConstants.LIBRARY_URI, uri);
+ p.setProperty(URIConstants.LIBRARY_VERSION, libraryVersion);
+ String addTaglib = item.getParent().getAttributeValue(TLDToPaletteHelper.ADD_TAGLIB);
+ p.setProperty(URIConstants.DEFAULT_PREFIX, defaultPrefix);
+ p.setProperty(PaletteInsertHelper.PROPOPERTY_ADD_TAGLIB, addTaglib);
+ if(((Node)region).getNodeType() == Node.ELEMENT_NODE)
+ p.put("selectionProvider", selProvider); //$NON-NLS-1$
+ PaletteInsertHelper.insertIntoEditor(sourceEditor.getTextViewer(), p);
+ } catch (Exception e) {
+ VpePlugin.reportProblem(e);
+ }
+
+ }
+
+ }
+
+ class VpeSelectionProvider implements ISelectionProvider{
+ VpeSelection selection;
+
+ public VpeSelectionProvider(IndexedRegion region){
+ selection = new VpeSelection(region);
+ }
+ public VpeSelectionProvider(int position){
+ selection = new VpeSelection(position);
+ }
+ public VpeSelectionProvider(int offset, int length){
+ selection = new VpeSelection(offset, length);
+ }
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ }
+ public ISelection getSelection() {
+ return selection;
+ }
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+
+ }
+ public void setSelection(ISelection selection) {
+ }
+ }
+
+ class VpeSelection implements ITextSelection{
+ String text=""; //$NON-NLS-1$
+ int offset, length;
+
+ public VpeSelection(int position){
+ offset = position;
+ length = 0;
+ }
+
+ public VpeSelection(int offset, int length){
+ this.offset = offset;
+ this.length = length;
+ if (length > 0) {
+ try{
+ text = sourceEditor.getTextViewer().getDocument().get(offset, length);
+ }catch(Exception ex){
+ VpePlugin.reportProblem(ex);
+ }
+ }
+ }
+
+ public VpeSelection(IndexedRegion region){
+ offset = region.getStartOffset();
+ length = region.getEndOffset() - offset;
+ try{
+ text = sourceEditor.getTextViewer().getDocument().get(offset, length);
+ }catch(Exception ex){
+ VpePlugin.reportProblem(ex);
+ }
+ }
+
+ public int getEndLine() {
+ return 0;
+ }
+ public int getLength() {
+ return length;
+ }
+ public int getOffset() {
+ return offset;
+ }
+ public int getStartLine() {
+ return 0;
+ }
+ public String getText() {
+ return text;
+ }
+ public boolean isEmpty() {
+ return false;
+ }
+}
+
+ class VpeAction extends Action{
+ public Node actionNode;
+ public VpeAction(String name, Node node){
+ super(name);
+ this.actionNode = node;
+ }
+ }
+
+ class VpeTextOperationAction extends Action{
+ private String id;
+ private IndexedRegion region;
+ public VpeTextOperationAction(String name, String id, IndexedRegion region){
+ super(name);
+ this.id = id;
+ this.region = region;
+ }
+ public void run(){
+ sourceEditor.getSelectionProvider().setSelection(new VpeSelection(region));
+ sourceEditor.getAction(id).run();
+ }
+ }
+
+ public void refreshExternalLinks() {
+ pageContext.getVisualBuilder().refreshExternalLinks();
+ }
+
+ public IPath getPath() {
+ if (editPart != null) {
+ IEditorInput input = editPart.getEditorInput();
+ if (input != null && input instanceof IFileEditorInput) {
+ return ((IFileEditorInput)input).getFile().getFullPath();
+ }
+ }
+ return null;
+ }
+
+ public void changed(Object source) {
+ if(cssReferenceListListener == source) {
+ pageContext.getVisualBuilder().refreshExternalLinks();
+ } else if (absoluteFolderReferenceListListener == source ||
+ relativeFolderReferenceListListener == source ||
+ taglibReferenceListListener == source) {
+ visualRefresh();
+ }
+ }
+
+ public void dragEnter(nsIDOMEvent event) {
+ if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
+ System.out.println("<<<<<<<<<<<<<<<<<<<< DragEnter"); //$NON-NLS-1$
+ }
+ }
+
+ public void dragExit(nsIDOMEvent event) {
+ if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
+ System.out.println("<<<<<<<<<<<<<<<<<<<< dragExit"); //$NON-NLS-1$
+ }
+ // TODO Sergey Vasilyev figure out with drag caret
+// xulRunnerEditor.hideDragCaret();
+ }
+
+ public void dragOver(nsIDOMEvent event) {
+
+ visualBuilder.getDnd().dragOver(event, this);
+
+ }
+
+ public void _dragOver(nsIDOMEvent event) {
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_VISUAL)) {
+ return;
+ }
+ if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
+ System.out.println("<<<<<<<<<<<<<<<<<<<< dragOver"); //$NON-NLS-1$
+ }
+
+// browser.computeDropPosition(event);
+
+ boolean canDrop = !xulRunnerEditor.isMozillaDragFlavor();
+ if (canDrop) {
+ Clipboard clipboard = new Clipboard(Display.getCurrent());
+ canDrop = clipboard.getContents(ModelTransfer.getInstance()) != null;
+ }
+ if (canDrop) {
+ canDrop = VpeDndUtil.isDropEnabled((IModelObjectEditorInput)sourceEditor.getEditorInput());
+ }
+ if (canDrop) {
+ VpeVisualCaretInfo caretInfo = selectionBuilder.getVisualCaretInfo(event);
+ canDrop = caretInfo.exist();
+ if (canDrop) {
+ caretInfo.showCaret();
+ } else {
+ caretInfo.hideCaret();
+ }
+ }
+ if (!canDrop) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ switcher.stopActiveEditor();
+ }
+
+ public void drop(nsIDOMEvent event) {
+ if (VpeDebug.PRINT_VISUAL_DRAGDROP_EVENT) {
+ System.out.println("<<< outerDrop"); //$NON-NLS-1$
+ }
+ event.preventDefault();
+ }
+
+ public boolean canInnerDrag(nsIDOMMouseEvent event) {
+ onHideTooltip();
+
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print("<<<<<< canInnerDrag"); //$NON-NLS-1$
+ }
+ if (innerDragInfo != null) {
+ innerDragInfo.Release();
+ innerDragInfo = null;
+ }
+ boolean canDrag = false;
+ VpeVisualInnerDragInfo dragInfo = selectionBuilder.getInnerDragInfo(event);
+ if (dragInfo != null) {
+ nsIDOMNode dragNode = dragInfo.getNode();
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print(" dragNode: " + dragNode.getNodeName() + "(" + dragNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ switch (dragNode.getNodeType()) {
+ case nsIDOMNode.ELEMENT_NODE:
+ canDrag = visualBuilder.canInnerDrag((nsIDOMElement)dragNode);
+ case nsIDOMNode.TEXT_NODE:
+ canDrag = visualBuilder.isTextEditable(dragNode);
+ }
+ if (canDrag) {
+ VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(dragInfo);
+ if (sourceInnerDragInfo.getNode() != null) {
+ innerDragInfo = dragInfo;
+ InnerDragBuffer.object = sourceInnerDragInfo.getNode();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ InnerDragBuffer.object = null;
+ }
+ });
+ } else {
+ canDrag = false;
+ }
+ }
+ if (!canDrag) {
+ dragInfo.Release();
+ }
+ }
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println(" canDrag: " + canDrag); //$NON-NLS-1$
+ }
+ return canDrag;
+ }
+
+ VpeDropWindow dropWindow = null;
+
+ public MozillaDropInfo canInnerDrop(nsIDOMMouseEvent event) {
+ onHideTooltip();
+
+ if(dropWindow.active) {
+ if(!event.getAltKey()) {
+ dropWindow.close();
+ } else {
+ return null;
+ }
+ }
+ if(event.getAltKey()) {
+ nsIDOMNode visualNode = VisualDomUtil.getTargetNode(event);
+ Node sourceNode = domMapping.getNearSourceNode(visualNode);
+ if(sourceNode != null) {
+ dropWindow.active = true;
+ dropWindow.setEventPosition(event.getScreenX(), event.getScreenY());
+ dropWindow.setInitialTargetNode(sourceNode);
+ dropWindow.open();
+ event.stopPropagation();
+ event.preventDefault();
+ return null;
+ }
+ }
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print("<<<<<< canInnerDrop"); //$NON-NLS-1$
+ }
+ boolean canDrop = false;;
+ nsIDOMNode caretParent = null;
+ long caretOffset = 0;
+ if (innerDragInfo != null) {
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(event);
+ if (visualDropInfo.getDropContainer() != null) {
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print(" x: " + visualDropInfo.getMouseX() + " y: " + visualDropInfo.getMouseY() + //$NON-NLS-1$ //$NON-NLS-2$
+ " container: " + visualDropInfo.getDropContainer().getNodeName() + //$NON-NLS-1$
+ "(" + visualDropInfo.getDropContainer() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
+ " parent: " + visualDropInfo.getDropContainer().getParentNode().getNodeName() + //$NON-NLS-1$
+ "(" + visualDropInfo.getDropContainer().getParentNode() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
+ " offset: " + visualDropInfo.getDropOffset()); //$NON-NLS-1$
+ }
+ VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(innerDragInfo);
+ VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceInnerDragInfo.getNode(), visualDropInfo, true);
+ canDrop = sourceDropInfo.canDrop();
+ if (canDrop) {
+ VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
+ if (newVisualDropInfo != null) {
+ visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
+ caretParent = newVisualDropInfo.getDropContainer();
+ caretOffset = newVisualDropInfo.getDropOffset();
+ }
+ }
+ }
+ visualDropInfo.Release();
+ }
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println(" canDrop: " + canDrop); //$NON-NLS-1$
+ }
+ return new MozillaDropInfo(canDrop, caretParent, caretOffset);
+ }
+
+ public void innerDrop(nsIDOMMouseEvent event) {
+ onHideTooltip();
+
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print("<<<<<< innerDrop"); //$NON-NLS-1$
+ }
+ if (innerDragInfo != null) {
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(event);
+ if (visualDropInfo.getDropContainer() != null) {
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.print(" container: " + visualDropInfo.getDropContainer().getNodeName() + //$NON-NLS-1$
+ "(" + visualDropInfo.getDropContainer() + ")" + //$NON-NLS-1$ //$NON-NLS-2$
+ " offset: " + visualDropInfo.getDropOffset()); //$NON-NLS-1$
+ }
+
+ VpeSourceInnerDragInfo sourceInnerDragInfo = visualBuilder.getSourceInnerDragInfo(innerDragInfo);
+ VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceInnerDragInfo.getNode(), visualDropInfo, true);
+ if(sourceDropInfo.canDrop()){
+ VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
+ if (newVisualDropInfo != null) {
+ visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
+ sourceDropInfo.setTop(visualDropInfo.getMouseY());
+ sourceDropInfo.setLeft(visualDropInfo.getMouseX());
+ visualBuilder.innerDrop(sourceInnerDragInfo, sourceDropInfo);
+ if (innerDragInfo != null) {
+ innerDragInfo.Release();
+ innerDragInfo = null;
+ }
+ }
+ }
+ }
+ }
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println();
+ }
+ }
+
+ public MozillaDropInfo canExternalDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
+ InnerDragBuffer.object = null;
+ onHideTooltip();
+
+ if(dropWindow.active) {
+ if(!mouseEvent.getAltKey()) {
+ dropWindow.close();
+ } else {
+ return new MozillaDropInfo(false, null, 0);
+ }
+ }
+ if(mouseEvent.getAltKey()) {
+ nsIDOMEvent event = (nsIDOMEvent) mouseEvent.queryInterface(nsIDOMEvent.NS_IDOMEVENT_IID);
+ nsIDOMNode visualNode = (nsIDOMNode) event.getTarget().queryInterface(nsIDOMNode.NS_IDOMNODE_IID);
+ Node sourceNode = domMapping.getNearSourceNode(visualNode);
+ if(sourceNode != null) {
+ if(ModelTransfer.MODEL.equals(flavor)){ //$NON-NLS-1$
+// XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
+// InnerDragBuffer.object = object;
+ } else {
+ dropWindow.flavor = flavor;
+ }
+ dropWindow.active = true;
+ dropWindow.setEventPosition(mouseEvent.getScreenX(), mouseEvent.getScreenY());
+ dropWindow.setInitialTargetNode(sourceNode);
+ dropWindow.open();
+ mouseEvent.stopPropagation();
+ mouseEvent.preventDefault();
+ return new MozillaDropInfo(false, null, 0);
+ }
+ }
+ boolean canDrop = false;
+ nsIDOMNode caretParent = null;
+ long caretOffset = 0;
+
+ if(MODEL_FLAVOR.equals(flavor)){
+ XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
+ if(object.getFileType() == XModelObject.FILE && !TLDUtil.isTaglib(object)) {
+ IFile f = (IFile)EclipseResourceUtil.getResource(object);
+ canDrop = f != null;
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
+ caretParent = visualDropInfo.getDropContainer();
+ caretOffset = visualDropInfo.getDropOffset();
+ } else {
+ String tagname = getTagName(object);
+ if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
+ Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
+ if (visualDropInfo.getDropContainer() != null) {
+ VpeSourceInnerDropInfo sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
+ canDrop = sourceDropInfo.canDrop();
+ if (canDrop) {
+ VpeVisualInnerDropInfo newVisualDropInfo = visualBuilder.getInnerDropInfo(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
+ if (newVisualDropInfo != null) {
+ visualBuilder.correctVisualDropPosition(newVisualDropInfo, visualDropInfo);
+ caretParent = newVisualDropInfo.getDropContainer();
+ caretOffset = newVisualDropInfo.getDropOffset();
+ }
+ }
+ }
+ visualDropInfo.Release();
+ }
+ }else if(XulRunnerEditor.TRANS_FLAVOR_kFileMime.equals(flavor) ||
+ XulRunnerEditor.TRANS_FLAVOR_kURLMime.equals(flavor)) {
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
+ caretParent = visualDropInfo.getDropContainer();
+ caretOffset = visualDropInfo.getDropOffset();
+ try {
+ canDrop = true;
+ } catch (Exception ex) {
+ VpePlugin.reportProblem(ex);
+ }
+ }
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println(" canDrop: " + canDrop + (canDrop ? " container: " + caretParent.getNodeName() + " offset: " + caretOffset : "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ }
+ return new MozillaDropInfo(canDrop, caretParent, caretOffset);
+
+ }
+
+ public VpeSourceInnerDropInfo canExternalDropMacro(XModelObject object, Node parentNode, int offset) {
+ String tagname = getTagName(object);
+ Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
+ return visualBuilder.getSourceInnerDropInfo(sourceDragNode, parentNode, offset, false);
+ }
+
+ public void externalDropAny(final String flavor, final String data, final Point range, Node container) {
+ if(flavor == null || flavor.length() == 0) return;
+ IDropCommand dropCommand = DropCommandFactory.getInstance().getDropCommand(flavor, JSPTagProposalFactory.getInstance());
+
+ boolean promptAttributes = "yes".equals(VpePreference.ALWAYS_REQUEST_FOR_ATTRIBUTE.getValue());
+ dropCommand.getDefaultModel().setPromptForTagAttributesRequired(promptAttributes);
+
+ dropCommand.execute(
+ new DropData(
+ flavor,
+ data,
+ sourceEditor.getEditorInput(),
+ (ISourceViewer)sourceEditor.getAdapter(ISourceViewer.class),
+ new VpeSelectionProvider(range.x,range.y),
+ container
+ )
+ );
+ }
+
+ private String getTagName(XModelObject object) {
+ String tagname = object.getAttributeValue("name"); //$NON-NLS-1$
+
+ XModelObject parent = object.getParent();
+ String uri = (parent == null) ? "" : parent.getAttributeValue(URIConstants.LIBRARY_URI); //$NON-NLS-1$
+ String defaultPrefix = (parent == null) ? "" : parent.getAttributeValue(URIConstants.DEFAULT_PREFIX); //$NON-NLS-1$
+
+ String[] texts = new String[]{"<"+tagname+">"}; //$NON-NLS-1$ //$NON-NLS-2$
+ PaletteInsertHelper.applyPrefix(texts, sourceEditor, tagname, uri, defaultPrefix);
+ tagname = texts[0].substring(1,texts[0].length()-1);
+
+ return tagname;
+ }
+
+ public void externalDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
+ onHideTooltip();
+
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
+ Point range = selectionBuilder.getSourceSelectionRangeAtVisualNode(visualDropInfo.getDropContainer(), (int)visualDropInfo.getDropOffset());
+ VpeSourceInnerDropInfo sourceDropInfo = null;
+
+ if(MODEL_FLAVOR.equals(flavor)){
+ XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
+ if(object.getFileType() == XModelObject.FILE && !TLDUtil.isTaglib(object)) {
+ flavor = "application/x-moz-file"; //$NON-NLS-1$
+ IFile f = (IFile)EclipseResourceUtil.getResource(object);
+ try {
+ data = f.getLocation().toFile().toURL().toString();
+ } catch (Exception e) {
+ VpePlugin.getPluginLog().logError(e);
+ }
+ } else {
+ String tagname = getTagName(object);
+ if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
+ Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
+ if (visualDropInfo.getDropContainer() != null) {
+ sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
+ range = selectionBuilder.getSourceSelectionRange(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
+ }
+ }
+ }
+
+ if (visualDropInfo.getDropContainer() != null) {
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println(" drop! container: " + visualDropInfo.getDropContainer().getNodeName()); //$NON-NLS-1$
+ }
+ externalDropAny(flavor, data, range, sourceDropInfo == null?null:sourceDropInfo.getContainer());
+ }
+ }
+
+ public void onShowTooltip(int x, int y, final String text) {
+
+ if (tip != null && !tip.isDisposed()) tip.dispose();
+
+ Display display = visualEditor.getControl().getDisplay();
+ Shell parent = visualEditor.getControl().getShell();
+
+ tip = new Shell(parent, SWT.NO_FOCUS| SWT.ON_TOP);
+ Color bckgColor = new Color(tip.getDisplay(), 255, 250, 236);
+ tip.setBackground(bckgColor);
+
+ Composite composite = tip;
+ GridLayout layout= new GridLayout();
+ layout.numColumns = 2;
+ layout.marginHeight= 0;
+ layout.marginWidth= 0;
+ layout.verticalSpacing= 0;
+ layout.horizontalSpacing= 0;
+ composite.setLayout(layout);
+ GridData gd= new GridData(GridData.FILL_BOTH);
+ composite.setLayoutData(gd);
+
+
+ final StyledText tipControlHeaderText = new StyledText(composite, SWT.MULTI | SWT.READ_ONLY);
+
+ tipControlHeaderText.setForeground(bckgColor);
+ tipControlHeaderText.setBackground(bckgColor);
+
+ String formatText = text.trim();
+
+ /** attributeString string containing the pairs attribute and it's value as one string*/
+ String[] attributeString = formatText.split("\n"); //$NON-NLS-1$
+ /** buffer string containing the attribute and the value in the different succeding string*/
+ String[] buffer = attributeString[0].split(" "); //$NON-NLS-1$
+
+ tipControlHeaderText.setText(buffer[0].toString());
+
+ tipControlHeaderText.addLineStyleListener(
+ new LineStyleListener() {
+ public void lineGetStyle(LineStyleEvent event){
+ Color color = new Color(tipControlHeaderText.getDisplay(), 201, 51, 40);
+ if (event.lineOffset == 0) {
+ StyleRange st = new StyleRange();
+ st.fontStyle = SWT.BOLD;
+ st.foreground = color;
+ event.styles = new StyleRange[]{st};
+ st.start = event.lineOffset;
+ st.length = event.lineText.length();
+ }
+ }
+ }
+ );
+
+ GridData gridData = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.horizontalSpan = 2;
+ tipControlHeaderText.setLayoutData(gridData);
+
+ StringBuffer tempAttr = new StringBuffer();
+ StringBuffer tempValue = new StringBuffer();
+
+ if (attributeString.length >= 2) {
+ for (int i = 1; i < attributeString.length; i++) {
+ buffer = attributeString[i].split(" ", 2); //$NON-NLS-1$
+ if (i == 1) {
+ tempAttr.append(buffer[0] + " "); //$NON-NLS-1$
+ tempValue.append((buffer.length>=2?buffer[1]:"") + " "); //$NON-NLS-1$ //$NON-NLS-2$
+ } else {
+ tempAttr.append("\n" + buffer[0] + " "); //$NON-NLS-1$ //$NON-NLS-2$
+ tempValue.append(" \n" + (buffer.length>=2?buffer[1]:"") + " "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ final StyledText tipControlAttributeText = new StyledText(composite,
+ SWT.MULTI | SWT.READ_ONLY);
+
+ tipControlAttributeText.setForeground(bckgColor);
+ tipControlAttributeText.setBackground(bckgColor);
+
+ tipControlAttributeText.setText(tempAttr.toString());
+ tipControlAttributeText
+ .addLineStyleListener(new LineStyleListener() {
+ public void lineGetStyle(LineStyleEvent event) {
+ Color color = new Color(tipControlHeaderText
+ .getDisplay(), 42, 148, 0);
+ StyleRange st = new StyleRange();
+ st.start = event.lineOffset;
+ st.length = event.lineText.length();
+ st.foreground = color;
+ st.fontStyle = SWT.NORMAL;
+ event.styles = new StyleRange[] { st };
+ }
+ });
+ GridData gridData1 = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
+ gridData1.horizontalAlignment = GridData.FILL;
+ tipControlAttributeText.setLayoutData(gridData1);
+
+ final StyledText tipControlValueText = new StyledText(composite,
+ SWT.MULTI | SWT.READ_ONLY);
+
+ tipControlValueText.setBackground(bckgColor);
+
+ tipControlValueText.setText(tempValue.toString());
+
+
+
+ GridData gridData2 = new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
+ gridData2.horizontalAlignment = GridData.FILL;
+ tipControlValueText.setLayoutData(gridData2);
+ }
+ /*
+ * Bug in Mozilla embedded API. Tooltip coordinates are wrong for
+ * elements inside an inline frame (IFrame tag). The workaround is
+ * to position the tooltip based on the mouse cursor location.
+ */
+ Point point = display.getCursorLocation();
+ /* Assuming cursor is 21x21 because this is the size of
+ * the arrow cursor on Windows
+ */
+ point.y += 21;
+ tip.setLocation(point);
+ tip.pack();
+ tip.setVisible(true);
+ }
+
+ public void onHideTooltip() {
+ if (tip != null && !tip.isDisposed()) tip.dispose();
+ tip = null;
+ }
+
+ public VpePageContext getPageContext() {
+
+ return pageContext;
+ }
+
+ public StructuredTextEditor getSourceEditor() {
+ return sourceEditor;
+ }
+
+ public FormatControllerManager getToolbarFormatControllerManager() {
+ return toolbarFormatControllerManager;
+ }
+
+ public void setToolbarFormatControllerManager(FormatControllerManager formatControllerManager) {
+ toolbarFormatControllerManager = formatControllerManager;
+ }
+ public void setSelectionBarController(SelectionBar selectionBar) {
+ this.selectionBar = selectionBar;
+ }
+
+ public IStructuredModel getModel() {
+ return sourceEditor.getModel();
+ }
+
+ public VpeDomMapping getDomMapping() {
+ return domMapping;
+ }
+
+ public VpeIncludeList getIncludeList(){
+ try {
+ if(includeList == null)
+ throw new Exception("includeList - NULL!!!"); //$NON-NLS-1$
+ } catch (Exception e) {
+ VpePlugin.getPluginLog().logError(e);
+ }
+ return includeList;
+ }
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (editPart.getVisualMode() != VpeEditorPart.SOURCE_MODE) {
+ if(toolbarFormatControllerManager != null) toolbarFormatControllerManager.selectionChanged();
+ }
+
+ if(selectionBar != null) selectionBar.selectionChanged();
+
+ if (!switcher.startActiveEditor(ActiveEditorSwitcher.ACTIVE_EDITOR_SOURCE)) {
+ return;
+ }
+ if (VpeDebug.PRINT_SOURCE_SELECTION_EVENT) {
+ System.out.println(">>>>>>>>>>>>>> selectionChanged " + event.getSource()); //$NON-NLS-1$
+ }
+ sourceSelectionChanged();
+ switcher.stopActiveEditor();
+ }
+
+ // nsIClipboardDragDropHooks implementation
+ public void onPasteOrDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
+ onHideTooltip();
+
+ VpeVisualInnerDropInfo visualDropInfo = selectionBuilder.getInnerDropInfo(mouseEvent);
+ Point range = selectionBuilder.getSourceSelectionRangeAtVisualNode(visualDropInfo.getDropContainer(), (int)visualDropInfo.getDropOffset());
+ VpeSourceInnerDropInfo sourceDropInfo = null;
+
+ XModelObject object = PreferenceModelUtilities.getPreferenceModel().getModelBuffer().source();
+
+ String tagname = getTagName(object);
+ if(tagname.indexOf("taglib") >= 0) tagname= "taglib"; //$NON-NLS-1$ //$NON-NLS-2$
+ Node sourceDragNode = ((Document)getModel().getAdapter(Document.class)).createElement(tagname);
+ if (visualDropInfo.getDropContainer() != null) {
+ sourceDropInfo = visualBuilder.getSourceInnerDropInfo(sourceDragNode, visualDropInfo, true);
+ range = selectionBuilder.getSourceSelectionRange(sourceDropInfo.getContainer(), sourceDropInfo.getOffset());
+ }
+
+ if (visualDropInfo.getDropContainer() != null) {
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out.println(" drop! container: " + visualDropInfo.getDropContainer().getNodeName()); //$NON-NLS-1$
+ }
+ final String finalFlavor = flavor;
+ final String finalData = data;
+ final Point finalRange = range;
+ final Node finalDropContainer = sourceDropInfo == null ? null : sourceDropInfo.getContainer();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ externalDropAny(finalFlavor, finalData, finalRange, finalDropContainer);
+ }
+ });
+ }
+ }
+
+ public void drop(Node node, Node parentNode, int offset) {
+ visualBuilder.innerDrop(node, parentNode, offset);
+ }
+
+ /* (non-Javadoc)
+ * @see org.mozilla.interfaces.nsISupports#queryInterface(java.lang.String)
+ */
+ public nsISupports queryInterface(String arg0) {
+ return Mozilla.getInstance().queryInterface(this, arg0);
+ }
+ /**
+ * Calls when editor content should be refreshed
+ */
+ public void onRefresh() {
+ //when we using separate thread to display selection rectangle
+ //it's working better than without
+ /*
+ * HACK
+ * We need wait some time while standart event will be handled
+ * and in process event handles some components are repainted(like buttons)
+ * and flasher are not repainted, so we should paint flasher
+ */
+
+
+ Display.getDefault().asyncExec(new Thread(){
+ public void run(){
+
+ getXulRunnerEditor().showSelectionRectangle();
+ }
+ });
+
+ }
+
+ /**
+ * @return the xulRunnerEditor
+ */
+ public XulRunnerEditor getXulRunnerEditor() {
+ return xulRunnerEditor;
+ }
+
+ /**
+ * @param xulRunnerEditor the xulRunnerEditor to set
+ */
+ public void setXulRunnerEditor(XulRunnerEditor xulRunnerEditor) {
+ this.xulRunnerEditor = xulRunnerEditor;
+ }
+
+ /**
+ * Start drag session
+ */
+ public void startDragSession(nsIDOMEvent domEvent) {
+
+ visualBuilder.getDnd().startDragSession(domEvent);
+ }
+
+ public void dragDrop(nsIDOMEvent domEvent) {
+
+ visualBuilder.getDnd().dragDrop(domEvent,this);
+ }
+
+ /**
+ * @return the selectionBuilder
+ */
+ public VpeSelectionBuilder getSelectionBuilder() {
+ return selectionBuilder;
+ }
+
+ /**
+ * @param selectionBuilder the selectionBuilder to set
+ */
+ public void setSelectionBuilder(VpeSelectionBuilder selectionBuilder) {
+ this.selectionBuilder = selectionBuilder;
+ }
+
+}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpePreviewDomBuilder.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpePreviewDomBuilder.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpePreviewDomBuilder.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -68,9 +68,8 @@
boolean registerFlag = isCurrentMainDocument();
switch (sourceNode.getNodeType()) {
case Node.ELEMENT_NODE:
- Map xmlnsMap = createXmlns((Element)sourceNode);
+// Map xmlnsMap = createXmlns((Element)sourceNode);
Set ifDependencySet = new HashSet();
- getPageContext().setCurrentVisualNode(visualOldContainer);
VpeTemplate template = templateManager.getTemplate(getPageContext(), (Element)sourceNode, ifDependencySet);
VpeCreationData creationData;
@@ -88,7 +87,6 @@
creationData = defTemplate.create(getPageContext(), sourceNode, getVisualDocument());
}
- getPageContext().setCurrentVisualNode(null);
nsIDOMElement visualNewElement;
visualNewElement = (nsIDOMElement)creationData.getNode();
setTooltip((Element)sourceNode, visualNewElement);
@@ -105,9 +103,7 @@
addChildren(template, sourceNode, visualOldContainer, childrenInfoList);
}
}
- getPageContext().setCurrentVisualNode(visualOldContainer);
template.validate(getPageContext(), (Element)sourceNode, getVisualDocument(), creationData);
- getPageContext().setCurrentVisualNode(null);
return visualNewElement;
case Node.TEXT_NODE:
return createTextNode(sourceNode, registerFlag);
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -1,867 +1,869 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.vpe.editor;
-
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.editor;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
-import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.eclipse.wst.xml.core.internal.document.NodeImpl;
-import org.jboss.tools.common.model.XModel;
-import org.jboss.tools.common.model.XModelObject;
-import org.jboss.tools.common.model.project.IModelNature;
-import org.jboss.tools.common.model.util.EclipseResourceUtil;
-import org.jboss.tools.jst.jsp.preferences.VpePreference;
-import org.jboss.tools.jst.web.model.helpers.WebAppHelper;
-import org.jboss.tools.vpe.VpeDebug;
-import org.jboss.tools.vpe.VpePlugin;
-import org.jboss.tools.vpe.dnd.VpeDnD;
-import org.jboss.tools.vpe.editor.bundle.BundleMap;
-import org.jboss.tools.vpe.editor.context.VpePageContext;
-import org.jboss.tools.vpe.editor.css.CSSReferenceList;
-import org.jboss.tools.vpe.editor.css.ResourceReference;
-import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
-import org.jboss.tools.vpe.editor.mapping.VpeElementMapping;
-import org.jboss.tools.vpe.editor.mapping.VpeNodeMapping;
-import org.jboss.tools.vpe.editor.mozilla.MozillaEditor;
-import org.jboss.tools.vpe.editor.template.VpeChildrenInfo;
-import org.jboss.tools.vpe.editor.template.VpeCreationData;
+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.document.NodeImpl;
+import org.jboss.tools.common.model.XModel;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.project.IModelNature;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.jst.jsp.preferences.VpePreference;
+import org.jboss.tools.jst.web.model.helpers.WebAppHelper;
+import org.jboss.tools.vpe.VpeDebug;
+import org.jboss.tools.vpe.VpePlugin;
+import org.jboss.tools.vpe.dnd.VpeDnD;
+import org.jboss.tools.vpe.editor.bundle.BundleMap;
+import org.jboss.tools.vpe.editor.context.VpePageContext;
+import org.jboss.tools.vpe.editor.css.CSSReferenceList;
+import org.jboss.tools.vpe.editor.css.ResourceReference;
+import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
+import org.jboss.tools.vpe.editor.mapping.VpeElementMapping;
+import org.jboss.tools.vpe.editor.mapping.VpeNodeMapping;
+import org.jboss.tools.vpe.editor.mozilla.MozillaEditor;
+import org.jboss.tools.vpe.editor.template.VpeChildrenInfo;
+import org.jboss.tools.vpe.editor.template.VpeCreationData;
import org.jboss.tools.vpe.editor.template.VpeCreatorUtil;
-import org.jboss.tools.vpe.editor.template.VpeDefaultPseudoContentCreator;
-import org.jboss.tools.vpe.editor.template.VpeTagDescription;
-import org.jboss.tools.vpe.editor.template.VpeTemplate;
-import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
-import org.jboss.tools.vpe.editor.template.VpeToggableTemplate;
-import org.jboss.tools.vpe.editor.template.dnd.VpeDnd;
-import org.jboss.tools.vpe.editor.util.HTML;
-import org.jboss.tools.vpe.editor.util.TextUtil;
-import org.jboss.tools.vpe.editor.util.VisualDomUtil;
-import org.jboss.tools.vpe.editor.util.VpeStyleUtil;
-import org.jboss.tools.vpe.xulrunner.editor.XulRunnerEditor;
-import org.jboss.tools.vpe.xulrunner.editor.XulRunnerVpeUtils;
-import org.mozilla.interfaces.nsIDOMAttr;
-import org.mozilla.interfaces.nsIDOMDocument;
-import org.mozilla.interfaces.nsIDOMElement;
-import org.mozilla.interfaces.nsIDOMHTMLInputElement;
-import org.mozilla.interfaces.nsIDOMMouseEvent;
-import org.mozilla.interfaces.nsIDOMNode;
-import org.mozilla.interfaces.nsIDOMNodeList;
-import org.mozilla.interfaces.nsIDOMRange;
-import org.mozilla.interfaces.nsIDOMText;
-import org.mozilla.xpcom.XPCOMException;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
+import org.jboss.tools.vpe.editor.template.VpeDefaultPseudoContentCreator;
+import org.jboss.tools.vpe.editor.template.VpeTagDescription;
+import org.jboss.tools.vpe.editor.template.VpeTemplate;
+import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
+import org.jboss.tools.vpe.editor.template.VpeToggableTemplate;
+import org.jboss.tools.vpe.editor.template.dnd.VpeDnd;
+import org.jboss.tools.vpe.editor.util.HTML;
+import org.jboss.tools.vpe.editor.util.TextUtil;
+import org.jboss.tools.vpe.editor.util.VisualDomUtil;
+import org.jboss.tools.vpe.editor.util.VpeStyleUtil;
+import org.jboss.tools.vpe.xulrunner.editor.XulRunnerEditor;
+import org.jboss.tools.vpe.xulrunner.editor.XulRunnerVpeUtils;
+import org.mozilla.interfaces.nsIDOMAttr;
+import org.mozilla.interfaces.nsIDOMDocument;
+import org.mozilla.interfaces.nsIDOMElement;
+import org.mozilla.interfaces.nsIDOMHTMLInputElement;
+import org.mozilla.interfaces.nsIDOMMouseEvent;
+import org.mozilla.interfaces.nsIDOMNode;
+import org.mozilla.interfaces.nsIDOMNodeList;
+import org.mozilla.interfaces.nsIDOMRange;
+import org.mozilla.interfaces.nsIDOMText;
+import org.mozilla.xpcom.XPCOMException;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import org.eclipse.jface.text.IDocument;
-public class VpeVisualDomBuilder extends VpeDomBuilder {
- /** REGEX_EL */
- private static final Pattern REGEX_EL = Pattern.compile(
- "[\\$|\\#]\\{.*\\}", Pattern.MULTILINE + Pattern.DOTALL);
-
- private static final String PSEUDO_ELEMENT = "br";
- private static final String PSEUDO_ELEMENT_ATTR = "vpe:pseudo-element";
- private static final String INIT_ELEMENT_ATTR = "vpe:init-element";
- private static final String MOZ_ANONCLASS_ATTR = "_MOZ_ANONCLASS";
- private static final String COMMENT_STYLE = "font-style:italic; color:green";
- private static final String COMMENT_PREFIX = "";
- private static final String COMMENT_SUFFIX = "";
- private static final String INCLUDE_ELEMENT_ATTR = "vpe:include-element";
- private static final int DRAG_AREA_WIDTH = 10;
- private static final int DRAG_AREA_HEIGHT = 10;
- private static final String ATTR_XMLNS = "xmlns";
- private static final String ATTR_DRAG_AVAILABLE_CLASS = "__drag__available_style";
-
- private MozillaEditor visualEditor;
- private XulRunnerEditor xulRunnerEditor;
- private nsIDOMDocument visualDocument;
- private nsIDOMElement visualContentArea;
- private VpePageContext pageContext;
- private VpeDnD dnd;
- private nsIDOMNode headNode;
- private List includeStack;
- boolean rebuildFlag = false;
-
- /** faceletFile */
- private boolean faceletFile = false;
-
- private static final String ATTR_VPE = "vpe";
- private static final String ATTR_VPE_INLINE_LINK_VALUE = "inlinelink";
-
- private static final String ATTR_REL_STYLESHEET_VALUE = "stylesheet";
-
- private static final String YES_STRING = "yes";
- private static final String NO_STRING = "no";
- private static final String ZERO_STRING = "0";
- private static final String EMPTY_STRING = "";
-
- private static final String ATRIBUTE_BORDER = "border";
- private static final String ATRIBUTE_CELLSPACING = "cellspacing";
- private static final String ATRIBUTE_CELLPADDING = "cellpadding";
-
- private static final String DOTTED_BORDER_STYLE = "border : 1px dotted #808080";
- private static final String DOTTED_BORDER_STYLE_FOR_IMG = "1px dotted #808080";
- private static final String DOTTED_BORDER_STYLE_FOR_TD = "border-left : 1px dotted #808080; border-right : 1px dotted #808080; border-top : 1px dotted #808080; border-bottom : 0px; color:#0051DD; background-color:#ECF3FF; padding-left: 3px; padding-right: 3px; line-height : 10px; font-family : arial; font-size : 10px; text-align:top; margin : 1px; -moz-user-modify : read-only";
- private static final String DOTTED_BORDER_STYLE_FOR_SPAN = "border : 1px solid #0051DD; color:#0051DD; background-color:#ECF3FF; padding-left: 3px; padding-right: 3px; line-height : 10px; font-family : arial; font-size : 10px; text-align:top; margin : 1px; -moz-user-modify : read-only";
-
- static private HashSet<String> unborderedSourceNodes = new HashSet<String>();
- static {
- unborderedSourceNodes.add(HTML.TAG_HTML);
- unborderedSourceNodes.add(HTML.TAG_HEAD);
- unborderedSourceNodes.add(HTML.TAG_BODY);
- }
-
- static private HashSet<String> unborderedVisualNodes = new HashSet<String>();
- static {
- unborderedVisualNodes.add(HTML.TAG_TBODY);
- unborderedVisualNodes.add(HTML.TAG_THEAD);
- unborderedVisualNodes.add(HTML.TAG_TR);
- unborderedVisualNodes.add(HTML.TAG_TD);
- unborderedVisualNodes.add(HTML.TAG_COL);
- unborderedVisualNodes.add(HTML.TAG_COLS);
- unborderedVisualNodes.add(HTML.TAG_COLGROUP);
- unborderedVisualNodes.add(HTML.TAG_LI);
- unborderedVisualNodes.add(HTML.TAG_BR);
- }
- private VpeDnd dropper;
+public class VpeVisualDomBuilder extends VpeDomBuilder {
+ /** REGEX_EL */
+ private static final Pattern REGEX_EL = Pattern.compile(
+ "[\\$|\\#]\\{.*\\}", Pattern.MULTILINE + Pattern.DOTALL);
+
+ private static final String PSEUDO_ELEMENT = "br";
+ private static final String PSEUDO_ELEMENT_ATTR = "vpe:pseudo-element";
+ private static final String INIT_ELEMENT_ATTR = "vpe:init-element";
+ private static final String MOZ_ANONCLASS_ATTR = "_MOZ_ANONCLASS";
+ private static final String COMMENT_STYLE = "font-style:italic; color:green";
+ private static final String COMMENT_PREFIX = "";
+ private static final String COMMENT_SUFFIX = "";
+ private static final String INCLUDE_ELEMENT_ATTR = "vpe:include-element";
+ private static final int DRAG_AREA_WIDTH = 10;
+ private static final int DRAG_AREA_HEIGHT = 10;
+ private static final String ATTR_XMLNS = "xmlns";
+ private static final String ATTR_DRAG_AVAILABLE_CLASS = "__drag__available_style";
+
+ private MozillaEditor visualEditor;
+ private XulRunnerEditor xulRunnerEditor;
+ private nsIDOMDocument visualDocument;
+ private nsIDOMElement visualContentArea;
+ private VpePageContext pageContext;
+ private VpeDnD dnd;
+ private nsIDOMNode headNode;
+ private List includeStack;
+ boolean rebuildFlag = false;
+
+ /** faceletFile */
+ private boolean faceletFile = false;
+
+ private static final String ATTR_VPE = "vpe";
+ private static final String ATTR_VPE_INLINE_LINK_VALUE = "inlinelink";
+
+ private static final String ATTR_REL_STYLESHEET_VALUE = "stylesheet";
+
+ private static final String YES_STRING = "yes";
+ private static final String NO_STRING = "no";
+ private static final String ZERO_STRING = "0";
+ private static final String EMPTY_STRING = "";
+
+ private static final String ATRIBUTE_BORDER = "border";
+ private static final String ATRIBUTE_CELLSPACING = "cellspacing";
+ private static final String ATRIBUTE_CELLPADDING = "cellpadding";
+
+ private static final String DOTTED_BORDER_STYLE = "border : 1px dotted #808080";
+ private static final String DOTTED_BORDER_STYLE_FOR_IMG = "1px dotted #808080";
+ private static final String DOTTED_BORDER_STYLE_FOR_TD = "border-left : 1px dotted #808080; border-right : 1px dotted #808080; border-top : 1px dotted #808080; border-bottom : 0px; color:#0051DD; background-color:#ECF3FF; padding-left: 3px; padding-right: 3px; line-height : 10px; font-family : arial; font-size : 10px; text-align:top; margin : 1px; -moz-user-modify : read-only";
+ private static final String DOTTED_BORDER_STYLE_FOR_SPAN = "border : 1px solid #0051DD; color:#0051DD; background-color:#ECF3FF; padding-left: 3px; padding-right: 3px; line-height : 10px; font-family : arial; font-size : 10px; text-align:top; margin : 1px; -moz-user-modify : read-only";
+
+ static private HashSet<String> unborderedSourceNodes = new HashSet<String>();
+ static {
+ unborderedSourceNodes.add(HTML.TAG_HTML);
+ unborderedSourceNodes.add(HTML.TAG_HEAD);
+ unborderedSourceNodes.add(HTML.TAG_BODY);
+ }
+
+ static private HashSet<String> unborderedVisualNodes = new HashSet<String>();
+ static {
+ unborderedVisualNodes.add(HTML.TAG_TBODY);
+ unborderedVisualNodes.add(HTML.TAG_THEAD);
+ unborderedVisualNodes.add(HTML.TAG_TR);
+ unborderedVisualNodes.add(HTML.TAG_TD);
+ unborderedVisualNodes.add(HTML.TAG_COL);
+ unborderedVisualNodes.add(HTML.TAG_COLS);
+ unborderedVisualNodes.add(HTML.TAG_COLGROUP);
+ unborderedVisualNodes.add(HTML.TAG_LI);
+ unborderedVisualNodes.add(HTML.TAG_BR);
+ }
+ private VpeDnd dropper;
private Map<IFile,Document> includeDocuments = new HashMap<IFile, Document>();
-
- public VpeVisualDomBuilder(VpeDomMapping domMapping,
- INodeAdapter sorceAdapter, VpeTemplateManager templateManager,
- MozillaEditor visualEditor, VpePageContext pageContext) {
- super(domMapping, sorceAdapter, templateManager);
- this.visualEditor = visualEditor;
- xulRunnerEditor = visualEditor.getXulRunnerEditor();
- this.visualDocument = visualEditor.getDomDocument();
- this.visualContentArea = visualEditor.getContentArea();
- this.dnd = new VpeDnD();
- this.pageContext = pageContext;
- this.headNode = visualEditor.getHeadNode();
- dropper = new VpeDnd();
- dropper.setDndData(false, true);
-
- if (isFacelet()) {
- faceletFile = true;
- } else {
- faceletFile = false;
- }
-
- }
-
- public void buildDom(Document sourceDocument) {
+
+ public VpeVisualDomBuilder(VpeDomMapping domMapping,
+ INodeAdapter sorceAdapter, VpeTemplateManager templateManager,
+ MozillaEditor visualEditor, VpePageContext pageContext) {
+ super(domMapping, sorceAdapter, templateManager);
+ this.visualEditor = visualEditor;
+ xulRunnerEditor = visualEditor.getXulRunnerEditor();
+ this.visualDocument = visualEditor.getDomDocument();
+ this.visualContentArea = visualEditor.getContentArea();
+ this.dnd = new VpeDnD();
+ this.pageContext = pageContext;
+ this.headNode = visualEditor.getHeadNode();
+ dropper = new VpeDnd();
+ dropper.setDndData(false, true);
+
+ if (isFacelet()) {
+ faceletFile = true;
+ } else {
+ faceletFile = false;
+ }
+
+ }
+
+ public void buildDom(Document sourceDocument) {
VpeSourceDomBuilder sourceBuilder = pageContext.getSourceBuilder();
IDocument document = sourceBuilder.getStructuredTextViewer()
.getDocument();
if (document == null)
return;
- includeStack = new ArrayList();
- IEditorInput input = pageContext.getEditPart().getEditorInput();
- if (input instanceof IFileEditorInput) {
- IFile file = ((IFileEditorInput) input).getFile();
- if (file != null) {
- includeStack.add(new VpeIncludeInfo(null, file, pageContext
- .getSourceBuilder().getSourceDocument()));
- }
- }
- pageContext.refreshConnector();
- pageContext.installIncludeElements();
- addChildren(null, sourceDocument, visualContentArea);
- registerNodes(new VpeNodeMapping(sourceDocument, visualContentArea));
- }
-
- public void rebuildDom(Document sourceDocument) {
+ includeStack = new ArrayList();
+ IEditorInput input = pageContext.getEditPart().getEditorInput();
+ if (input instanceof IFileEditorInput) {
+ IFile file = ((IFileEditorInput) input).getFile();
+ if (file != null) {
+ includeStack.add(new VpeIncludeInfo(null, file, pageContext
+ .getSourceBuilder().getSourceDocument()));
+ }
+ }
+ pageContext.refreshConnector();
+ pageContext.installIncludeElements();
+ addChildren(null, sourceDocument, visualContentArea);
+ registerNodes(new VpeNodeMapping(sourceDocument, visualContentArea));
+ }
+
+ public void rebuildDom(Document sourceDocument) {
//clearIncludeDocuments();
- cleanHead();
- domMapping.clear(visualContentArea);
+ cleanHead();
+ domMapping.clear(visualContentArea);
super.dispose();
- pageContext.clearAll();
- refreshExternalLinks();
- pageContext.getBundle().refreshRegisteredBundles();
- nsIDOMNodeList children = visualContentArea.getChildNodes();
- long len = children.getLength();
- for (long i = len - 1; i >= 0; i--) {
- visualContentArea.removeChild(children.item(i));
- }
-
- if (sourceDocument != null) {
- buildDom(sourceDocument);
- }
-
- rebuildFlag = true;
- }
-
- // temporary, will be change to prefference's variable
- // private boolean borderVisible = true;
-
- private boolean addNode(Node sourceNode, nsIDOMNode visualNextNode,
- nsIDOMNode visualContainer) {
- nsIDOMNode visualNewNode = createNode(sourceNode, visualContainer);
- // Fix for JBIDE-1097
- try {
- if (visualNewNode != null) {
- nsIDOMHTMLInputElement iDOMInputElement = (nsIDOMHTMLInputElement) visualNewNode
- .queryInterface(nsIDOMHTMLInputElement.NS_IDOMHTMLINPUTELEMENT_IID);
- iDOMInputElement.setReadOnly(true);
- }
- } catch (XPCOMException ex) {
- // just ignore this exception
- }
- if (visualNewNode != null) {
- if (visualNextNode == null) {
- visualContainer.appendChild(visualNewNode);
- } else {
- visualContainer.insertBefore(visualNewNode, visualNextNode);
- }
- return true;
- }
-
- return false;
- }
-
- private nsIDOMElement createBorder(Node sourceNode,
- nsIDOMElement visualNode, boolean block) {
- nsIDOMElement border = null;
- if (visualNode == null)
- return null;
- if (unborderedSourceNodes.contains(sourceNode.getNodeName()
- .toLowerCase()))
- return null;
- if (unborderedVisualNodes.contains(visualNode.getNodeName()
- .toLowerCase()))
- return null;
- if (HTML.TAG_IMG.equalsIgnoreCase(visualNode.getNodeName())) {
- String width = visualNode.getAttribute(ATRIBUTE_BORDER);
- if (width == null || ZERO_STRING.equalsIgnoreCase(width)
- || EMPTY_STRING.equalsIgnoreCase(width)) {
- String style = visualNode
- .getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
- style = VpeStyleUtil.setParameterInStyle(style,
- ATRIBUTE_BORDER, DOTTED_BORDER_STYLE_FOR_IMG);
- visualNode.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
- }
- return null;
- }
- if (block) {
- if (YES_STRING.equals(VpePreference.USE_DETAIL_BORDER.getValue())) {
- border = visualDocument.createElement(HTML.TAG_TABLE);
- border.setAttribute(ATRIBUTE_CELLSPACING, ZERO_STRING);
- border.setAttribute(ATRIBUTE_CELLPADDING, ZERO_STRING);
-
- nsIDOMElement tr1 = visualDocument.createElement(HTML.TAG_TR);
- border.appendChild(tr1);
- nsIDOMElement td1 = visualDocument.createElement(HTML.TAG_TD);
- td1.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
- DOTTED_BORDER_STYLE_FOR_TD);
- nsIDOMText text = visualDocument.createTextNode(sourceNode
- .getNodeName());
- td1.appendChild(text);
- tr1.appendChild(td1);
- nsIDOMElement tr2 = visualDocument.createElement(HTML.TAG_TR);
- border.appendChild(tr2);
- nsIDOMElement td2 = visualDocument.createElement(HTML.TAG_TD);
- tr2.appendChild(td2);
- nsIDOMElement p = visualDocument.createElement(HTML.TAG_P);
- p.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
- DOTTED_BORDER_STYLE);
- td2.appendChild(p);
-
- p.appendChild(visualNode);
-
- } else {
- border = visualDocument.createElement(HTML.TAG_TABLE);
- border.setAttribute(ATRIBUTE_CELLSPACING, ZERO_STRING);
- border.setAttribute(ATRIBUTE_CELLPADDING, ZERO_STRING);
-
- nsIDOMElement tr2 = visualDocument.createElement(HTML.TAG_TR);
- border.appendChild(tr2);
- nsIDOMElement td2 = visualDocument.createElement(HTML.TAG_TD);
- tr2.appendChild(td2);
- nsIDOMElement p = visualDocument.createElement(HTML.TAG_P);
- p.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
- DOTTED_BORDER_STYLE);
- td2.appendChild(p);
-
- p.appendChild(visualNode);
- }
- } else {
- border = visualDocument.createElement(HTML.TAG_SPAN);
- border.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
- DOTTED_BORDER_STYLE);
- if (YES_STRING.equals(VpePreference.USE_DETAIL_BORDER.getValue())) {
- nsIDOMElement name = visualDocument
- .createElement(HTML.TAG_SPAN);
- name.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
- DOTTED_BORDER_STYLE_FOR_SPAN);
- nsIDOMText text = visualDocument.createTextNode(sourceNode
- .getNodeName());
- name.appendChild(text);
- border.appendChild(name);
- }
- border.appendChild(visualNode);
- }
- if (VpeStyleUtil.getAbsolute((Element) sourceNode) && border != null) {
- int top = VpeStyleUtil.getSizeFromStyle((Element) sourceNode,
- VpeStyleUtil.ATTRIBUTE_STYLE + VpeStyleUtil.DOT_STRING
- + VpeStyleUtil.PARAMETER_TOP);
- int left = VpeStyleUtil.getSizeFromStyle((Element) sourceNode,
- VpeStyleUtil.ATTRIBUTE_STYLE + VpeStyleUtil.DOT_STRING
- + VpeStyleUtil.PARAMETER_LEFT);
-
- String style = visualNode
- .getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
- style = VpeStyleUtil.deleteFromString(style,
- VpeStyleUtil.PARAMETER_POSITION,
- VpeStyleUtil.SEMICOLON_STRING);
- style = VpeStyleUtil.deleteFromString(style,
- VpeStyleUtil.PARAMETER_TOP, VpeStyleUtil.SEMICOLON_STRING);
- style = VpeStyleUtil.deleteFromString(style,
- VpeStyleUtil.PARAMETER_LEFT, VpeStyleUtil.SEMICOLON_STRING);
- visualNode.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
-
- style = border.getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
- style = VpeStyleUtil.setAbsolute(style);
- if (top != -1)
- style = VpeStyleUtil.setSizeInStyle(style,
- VpeStyleUtil.PARAMETER_TOP, top);
- if (left != -1)
- style = VpeStyleUtil.setSizeInStyle(style,
- VpeStyleUtil.PARAMETER_LEFT, left);
- border.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
- }
- return border;
- }
-
- protected nsIDOMNode createNode(Node sourceNode,
- nsIDOMNode visualOldContainer) {
- boolean registerFlag = isCurrentMainDocument();
- switch (sourceNode.getNodeType()) {
- case Node.ELEMENT_NODE:
- Map<?, ?> xmlnsMap = createXmlns((Element) sourceNode);
- Set<Node> ifDependencySet = new HashSet<Node>();
+ pageContext.clearAll();
+ refreshExternalLinks();
+ pageContext.getBundle().refreshRegisteredBundles();
+
+ nsIDOMNodeList children = visualContentArea.getChildNodes();
+ long len = children.getLength();
+ for (long i = len - 1; i >= 0; i--) {
+ visualContentArea.removeChild(children.item(i));
+ }
+
+ if (sourceDocument != null) {
+ buildDom(sourceDocument);
+ }
+
+ rebuildFlag = true;
+ }
+
+ // temporary, will be change to prefference's variable
+ // private boolean borderVisible = true;
+
+ private boolean addNode(Node sourceNode, nsIDOMNode visualNextNode,
+ nsIDOMNode visualContainer) {
+ nsIDOMNode visualNewNode = createNode(sourceNode, visualContainer);
+ // Fix for JBIDE-1097
+ try {
+ if (visualNewNode != null) {
+ nsIDOMHTMLInputElement iDOMInputElement = (nsIDOMHTMLInputElement) visualNewNode
+ .queryInterface(nsIDOMHTMLInputElement.NS_IDOMHTMLINPUTELEMENT_IID);
+ iDOMInputElement.setReadOnly(true);
+ }
+ } catch (XPCOMException ex) {
+ // just ignore this exception
+ }
+ if (visualNewNode != null) {
+ if (visualNextNode == null) {
+ visualContainer.appendChild(visualNewNode);
+ } else {
+ visualContainer.insertBefore(visualNewNode, visualNextNode);
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ private nsIDOMElement createBorder(Node sourceNode,
+ nsIDOMElement visualNode, boolean block) {
+ nsIDOMElement border = null;
+ if (visualNode == null)
+ return null;
+ if (unborderedSourceNodes.contains(sourceNode.getNodeName()
+ .toLowerCase()))
+ return null;
+ if (unborderedVisualNodes.contains(visualNode.getNodeName()
+ .toLowerCase()))
+ return null;
+ if (HTML.TAG_IMG.equalsIgnoreCase(visualNode.getNodeName())) {
+ String width = visualNode.getAttribute(ATRIBUTE_BORDER);
+ if (width == null || ZERO_STRING.equalsIgnoreCase(width)
+ || EMPTY_STRING.equalsIgnoreCase(width)) {
+ String style = visualNode
+ .getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
+ style = VpeStyleUtil.setParameterInStyle(style,
+ ATRIBUTE_BORDER, DOTTED_BORDER_STYLE_FOR_IMG);
+ visualNode.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
+ }
+ return null;
+ }
+ if (block) {
+ if (YES_STRING.equals(VpePreference.USE_DETAIL_BORDER.getValue())) {
+ border = visualDocument.createElement(HTML.TAG_TABLE);
+ border.setAttribute(ATRIBUTE_CELLSPACING, ZERO_STRING);
+ border.setAttribute(ATRIBUTE_CELLPADDING, ZERO_STRING);
+
+ nsIDOMElement tr1 = visualDocument.createElement(HTML.TAG_TR);
+ border.appendChild(tr1);
+ nsIDOMElement td1 = visualDocument.createElement(HTML.TAG_TD);
+ td1.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
+ DOTTED_BORDER_STYLE_FOR_TD);
+ nsIDOMText text = visualDocument.createTextNode(sourceNode
+ .getNodeName());
+ td1.appendChild(text);
+ tr1.appendChild(td1);
+ nsIDOMElement tr2 = visualDocument.createElement(HTML.TAG_TR);
+ border.appendChild(tr2);
+ nsIDOMElement td2 = visualDocument.createElement(HTML.TAG_TD);
+ tr2.appendChild(td2);
+ nsIDOMElement p = visualDocument.createElement(HTML.TAG_P);
+ p.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
+ DOTTED_BORDER_STYLE);
+ td2.appendChild(p);
+
+ p.appendChild(visualNode);
+
+ } else {
+ border = visualDocument.createElement(HTML.TAG_TABLE);
+ border.setAttribute(ATRIBUTE_CELLSPACING, ZERO_STRING);
+ border.setAttribute(ATRIBUTE_CELLPADDING, ZERO_STRING);
+
+ nsIDOMElement tr2 = visualDocument.createElement(HTML.TAG_TR);
+ border.appendChild(tr2);
+ nsIDOMElement td2 = visualDocument.createElement(HTML.TAG_TD);
+ tr2.appendChild(td2);
+ nsIDOMElement p = visualDocument.createElement(HTML.TAG_P);
+ p.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
+ DOTTED_BORDER_STYLE);
+ td2.appendChild(p);
+
+ p.appendChild(visualNode);
+ }
+ } else {
+ border = visualDocument.createElement(HTML.TAG_SPAN);
+ border.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
+ DOTTED_BORDER_STYLE);
+ if (YES_STRING.equals(VpePreference.USE_DETAIL_BORDER.getValue())) {
+ nsIDOMElement name = visualDocument
+ .createElement(HTML.TAG_SPAN);
+ name.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE,
+ DOTTED_BORDER_STYLE_FOR_SPAN);
+ nsIDOMText text = visualDocument.createTextNode(sourceNode
+ .getNodeName());
+ name.appendChild(text);
+ border.appendChild(name);
+ }
+ border.appendChild(visualNode);
+ }
+ if (VpeStyleUtil.getAbsolute((Element) sourceNode) && border != null) {
+ int top = VpeStyleUtil.getSizeFromStyle((Element) sourceNode,
+ VpeStyleUtil.ATTRIBUTE_STYLE + VpeStyleUtil.DOT_STRING
+ + VpeStyleUtil.PARAMETER_TOP);
+ int left = VpeStyleUtil.getSizeFromStyle((Element) sourceNode,
+ VpeStyleUtil.ATTRIBUTE_STYLE + VpeStyleUtil.DOT_STRING
+ + VpeStyleUtil.PARAMETER_LEFT);
+
+ String style = visualNode
+ .getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
+ style = VpeStyleUtil.deleteFromString(style,
+ VpeStyleUtil.PARAMETER_POSITION,
+ VpeStyleUtil.SEMICOLON_STRING);
+ style = VpeStyleUtil.deleteFromString(style,
+ VpeStyleUtil.PARAMETER_TOP, VpeStyleUtil.SEMICOLON_STRING);
+ style = VpeStyleUtil.deleteFromString(style,
+ VpeStyleUtil.PARAMETER_LEFT, VpeStyleUtil.SEMICOLON_STRING);
+ visualNode.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
+
+ style = border.getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
+ style = VpeStyleUtil.setAbsolute(style);
+ if (top != -1)
+ style = VpeStyleUtil.setSizeInStyle(style,
+ VpeStyleUtil.PARAMETER_TOP, top);
+ if (left != -1)
+ style = VpeStyleUtil.setSizeInStyle(style,
+ VpeStyleUtil.PARAMETER_LEFT, left);
+ border.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
+ }
+ return border;
+ }
+
+ protected nsIDOMNode createNode(Node sourceNode,
+ nsIDOMNode visualOldContainer) {
+ boolean registerFlag = isCurrentMainDocument();
+ switch (sourceNode.getNodeType()) {
+ case Node.ELEMENT_NODE:
+// Map<?, ?> xmlnsMap = createXmlns((Element) sourceNode);
+ Set<Node> ifDependencySet = new HashSet<Node>();
pageContext.setCurrentVisualNode(visualOldContainer);
- VpeTemplate template = templateManager.getTemplate(pageContext,
- (Element) sourceNode, ifDependencySet);
-
- VpeCreationData creationData = null;
- //FIX FOR JBIDE-1568, added by Max Areshkau
- try {
- creationData = template.create(getPageContext(), sourceNode, getVisualDocument());
- }catch (XPCOMException ex) {
- VpePlugin.getPluginLog().logError(ex);
- VpeTemplate defTemplate = templateManager.getDefTemplate();
- creationData = defTemplate.create(getPageContext(), sourceNode, getVisualDocument());
- }
+ VpeTemplate template = templateManager.getTemplate(pageContext,
+ (Element) sourceNode, ifDependencySet);
+
+ VpeCreationData creationData = null;
+ //FIX FOR JBIDE-1568, added by Max Areshkau
+ try {
+ creationData = template.create(getPageContext(), sourceNode, getVisualDocument());
+ }catch (XPCOMException ex) {
+ VpePlugin.getPluginLog().logError(ex);
+ VpeTemplate defTemplate = templateManager.getDefTemplate();
+ creationData = defTemplate.create(getPageContext(), sourceNode, getVisualDocument());
+ }
pageContext.setCurrentVisualNode(null);
- nsIDOMElement visualNewElement = (nsIDOMElement) creationData
- .getNode();
-
- if (visualNewElement != null)
- correctVisualAttribute(visualNewElement);
-
- nsIDOMElement border = null;
- setTooltip((Element) sourceNode, visualNewElement);
- if (YES_STRING.equals(VpePreference.SHOW_BORDER_FOR_ALL_TAGS
- .getValue())
- && visualNewElement != null) {
- boolean block = true;
- if (template.getTagDescription(null, null, null,
- visualNewElement, null).getDisplayType() == VpeTagDescription.DISPLAY_TYPE_INLINE) {
- block = false;
- }
- border = createBorder(sourceNode, visualNewElement, block);
- }
- if (!isCurrentMainDocument() && visualNewElement != null) {
- setReadOnlyElement(visualNewElement);
- }
- if (registerFlag) {
- VpeElementMapping elementMapping = new VpeElementMapping(
- (Element) sourceNode, visualNewElement, border,
- template, ifDependencySet, creationData.getData());
- elementMapping.setXmlnsMap(xmlnsMap);
- registerNodes(elementMapping);
- }
- if (template.isChildren()) {
- List<?> childrenInfoList = creationData.getChildrenInfoList();
- if (childrenInfoList == null) {
- addChildren(template, sourceNode,
- visualNewElement != null ? visualNewElement
- : visualOldContainer);
- } else {
- addChildren(template, sourceNode, visualOldContainer,
- childrenInfoList);
- }
- }
+ nsIDOMElement visualNewElement = (nsIDOMElement) creationData
+ .getNode();
+
+ if (visualNewElement != null)
+ correctVisualAttribute(visualNewElement);
+
+ nsIDOMElement border = null;
+ setTooltip((Element) sourceNode, visualNewElement);
+ if (YES_STRING.equals(VpePreference.SHOW_BORDER_FOR_ALL_TAGS
+ .getValue())
+ && visualNewElement != null) {
+ boolean block = true;
+ if (template.getTagDescription(null, null, null,
+ visualNewElement, null).getDisplayType() == VpeTagDescription.DISPLAY_TYPE_INLINE) {
+ block = false;
+ }
+ border = createBorder(sourceNode, visualNewElement, block);
+ }
+ if (!isCurrentMainDocument() && visualNewElement != null) {
+ setReadOnlyElement(visualNewElement);
+ }
+ if (registerFlag) {
+ VpeElementMapping elementMapping = new VpeElementMapping(
+ (Element) sourceNode, visualNewElement, border,
+ template, ifDependencySet, creationData.getData());
+// elementMapping.setXmlnsMap(xmlnsMap);
+ registerNodes(elementMapping);
+ }
+ if (template.isChildren()) {
+ List<?> childrenInfoList = creationData.getChildrenInfoList();
+ if (childrenInfoList == null) {
+ addChildren(template, sourceNode,
+ visualNewElement != null ? visualNewElement
+ : visualOldContainer);
+ } else {
+ addChildren(template, sourceNode, visualOldContainer,
+ childrenInfoList);
+ }
+ }
pageContext.setCurrentVisualNode(visualOldContainer);
- template.validate(pageContext, (Element) sourceNode,
- visualDocument, creationData);
+ template.validate(pageContext, (Element) sourceNode,
+ visualDocument, creationData);
pageContext.setCurrentVisualNode(null);
- if (border != null)
- return border;
- else
- return visualNewElement;
- case Node.TEXT_NODE:
- return createTextNode(sourceNode, registerFlag);
- case Node.COMMENT_NODE:
- if (!YES_STRING.equals(VpePreference.SHOW_COMMENTS.getValue())) {
- return null;
- }
- nsIDOMElement visualNewComment = createComment(sourceNode);
- if (registerFlag) {
- registerNodes(new VpeNodeMapping(sourceNode, visualNewComment));
- }
- return visualNewComment;
- }
- return null;
- }
-
- private void correctVisualAttribute(nsIDOMElement element) {
-
- String styleValue = element.getAttribute(HTML.TAG_STYLE);
- String backgroundValue = element
- .getAttribute(VpeStyleUtil.PARAMETR_BACKGROND);
-
- if (styleValue != null) {
- styleValue = VpeStyleUtil.addFullPathIntoURLValue(styleValue,
- pageContext.getEditPart().getEditorInput());
- element.setAttribute(HTML.TAG_STYLE, styleValue);
- }
- if (backgroundValue != null) {
- backgroundValue = VpeStyleUtil
- .addFullPathIntoBackgroundValue(backgroundValue,
- pageContext.getEditPart().getEditorInput());
- element.setAttribute(VpeStyleUtil.PARAMETR_BACKGROND,
- backgroundValue);
- }
- }
-
- protected nsIDOMElement createComment(Node sourceNode) {
- nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV);
- div.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, COMMENT_STYLE);
- String value = COMMENT_PREFIX + sourceNode.getNodeValue()
- + COMMENT_SUFFIX;
- nsIDOMText text = visualDocument.createTextNode(value);
- div.appendChild(text);
- return div;
- }
-
- protected void addChildren(VpeTemplate containerTemplate,
- Node sourceContainer, nsIDOMNode visualContainer) {
- NodeList sourceNodes = sourceContainer.getChildNodes();
- int len = sourceNodes.getLength();
- int childrenCount = 0;
- for (int i = 0; i < len; i++) {
- Node sourceNode = sourceNodes.item(i);
- if (addNode(sourceNode, null, visualContainer)) {
- childrenCount++;
- }
- }
- if (childrenCount == 0) {
- setPseudoContent(containerTemplate, sourceContainer,
- visualContainer);
- }
- }
-
- protected void addChildren(VpeTemplate containerTemplate,
- Node sourceContainer, nsIDOMNode visualOldContainer,
- List<?> childrenInfoList) {
- for (int i = 0; i < childrenInfoList.size(); i++) {
- VpeChildrenInfo info = (VpeChildrenInfo) childrenInfoList.get(i);
- nsIDOMNode visualParent = info.getVisualParent();
- if (visualParent == null)
- visualParent = visualOldContainer;
- List<?> sourceChildren = info.getSourceChildren();
- int childrenCount = 0;
- if (sourceChildren != null) {
- for (int j = 0; j < sourceChildren.size(); j++) {
- if (addNode((Node) sourceChildren.get(j), null,
- visualParent)) {
- childrenCount++;
- }
- }
- }
- if (childrenCount == 0 && childrenInfoList.size() == 0) {
- setPseudoContent(containerTemplate, sourceContainer,
- visualParent);
- }
- }
- }
-
- // /////////////////////////////////////////////////////////////////////////
- public nsIDOMNode addStyleNodeToHead(String styleText) {
- nsIDOMNode newStyle = visualDocument
- .createElement(VpeStyleUtil.ATTRIBUTE_STYLE);
-
- if (styleText != null) {
- nsIDOMText newText = visualDocument.createTextNode(styleText);
- newStyle.appendChild(newText);
- }
- headNode.appendChild(newStyle);
- return newStyle;
- }
-
- public nsIDOMNode replaceStyleNodeToHead(nsIDOMNode oldStyleNode,
- String styleText) {
- nsIDOMElement newStyle = visualDocument
- .createElement(VpeStyleUtil.ATTRIBUTE_STYLE);
-
- if (styleText != null) {
- nsIDOMNode newText = visualDocument.createTextNode(styleText);
- newStyle.appendChild(newText);
- }
-
- headNode.replaceChild(newStyle, oldStyleNode);
- return newStyle;
- }
-
- public void removeStyleNodeFromHead(nsIDOMNode oldStyleNode) {
- headNode.removeChild(oldStyleNode);
- }
-
- void addExternalLinks() {
- IEditorInput input = pageContext.getEditPart().getEditorInput();
- IFile file = null;
- if (input instanceof IFileEditorInput) {
- file = ((IFileEditorInput) input).getFile();
- }
- ResourceReference[] l = null;
- if (file != null) {
- l = CSSReferenceList.getInstance().getAllResources(file);
- }
- if (l != null) {
- for (int i = 0; i < l.length; i++) {
- ResourceReference item = l[i];
- addLinkNodeToHead("file:///" + item.getLocation(), YES_STRING);
- }
- }
- }
-
- void removeExternalLinks() {
- nsIDOMNodeList childs = headNode.getChildNodes();
- long length = childs.getLength();
- for (long i = length - 1; i >= 0; i--) {
- nsIDOMNode node = childs.item(i);
- if (node.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
- boolean isLink = false;
- boolean isStyle = false;
- if ((isLink = HTML.TAG_LINK
- .equalsIgnoreCase(node.getNodeName()))
- || (isStyle = HTML.TAG_STYLE.equalsIgnoreCase(node
- .getNodeName()))) {
- nsIDOMElement element = (nsIDOMElement) node
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
- if ((isLink || (isStyle && ATTR_VPE_INLINE_LINK_VALUE
- .equalsIgnoreCase(element.getAttribute(ATTR_VPE))))
- && YES_STRING.equalsIgnoreCase(element
- .getAttribute("ext"))) {
- headNode.removeChild(node);
- }
- }
- }
- }
- }
-
- void refreshExternalLinks() {
- removeExternalLinks();
- addExternalLinks();
- }
-
- // ==========================================================
- void resetPseudoElement(nsIDOMNode visualNode) {
- if (visualNode != null) {
- nsIDOMNode visualParent = visualNode.getParentNode();
- if (visualParent != null) {
- PseudoInfo info = getPseudoInfo(visualParent);
- if (info.pseudoNode == null && !info.isElements) {
- addPseudoElementImpl(visualParent);
- } else if (info.pseudoNode != null && info.isElements) {
- visualParent.removeChild(info.pseudoNode);
- }
- }
- }
- }
-
- private PseudoInfo getPseudoInfo(nsIDOMNode visualParent) {
- nsIDOMNode pseudoNode = null;
- boolean isElements = false;
-
- if (visualParent == null)
- return new PseudoInfo();
- nsIDOMNodeList visualNodes = visualParent.getChildNodes();
- if (visualNodes == null)
- return new PseudoInfo();
-
- long length = visualNodes.getLength();
- for (long i = 0; i < length; i++) {
- nsIDOMNode visualNode = visualNodes.item(i);
- if (pseudoNode == null && isPseudoElement(visualNode)) {
- pseudoNode = visualNode;
- } else if (!isEmptyText(visualNode)) {
- isElements = true;
- }
- if (pseudoNode != null && isElements) {
- break;
- }
- }
- return new PseudoInfo(pseudoNode, isElements);
- }
-
- static boolean isInitElement(nsIDOMNode visualNode) {
- if (visualNode == null) {
- return false;
- }
-
- if (visualNode.getNodeType() != Node.ELEMENT_NODE) {
- return false;
- }
-
- if (YES_STRING.equalsIgnoreCase(((nsIDOMElement) visualNode)
- .getAttribute(INIT_ELEMENT_ATTR))) {
- return true;
- }
-
- return false;
- }
-
- static boolean isPseudoElement(nsIDOMNode visualNode) {
- if (visualNode == null) {
- return false;
- }
-
- if (visualNode.getNodeType() != Node.ELEMENT_NODE) {
- return false;
- }
-
- if (YES_STRING.equalsIgnoreCase(((nsIDOMElement) visualNode
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
- .getAttribute(PSEUDO_ELEMENT_ATTR))) {
- return true;
- }
-
- return false;
- }
-
- private void setPseudoContent(VpeTemplate containerTemplate,
- Node sourceContainer, nsIDOMNode visualContainer) {
- if (containerTemplate != null) {
- containerTemplate.setPseudoContent(pageContext, sourceContainer,
- visualContainer, visualDocument);
- } else {
- VpeDefaultPseudoContentCreator.getInstance().setPseudoContent(
- pageContext, sourceContainer, visualContainer,
- visualDocument);
- }
-
- // if (isEmptyElement(visualContainer)) {
- // addPseudoElementImpl(visualContainer);
- // }
- }
-
- private void addPseudoElementImpl(nsIDOMNode visualParent) {
- if (!templateManager.isWithoutPseudoElementContainer(visualParent
- .getNodeName())) {
- if (VpeDebug.VISUAL_ADD_PSEUDO_ELEMENT) {
- System.out.println("-------------------- addPseudoElement: "
- + visualParent.getNodeName());
- }
- nsIDOMElement visualPseudoElement = visualDocument
- .createElement(PSEUDO_ELEMENT);
- visualPseudoElement.setAttribute(PSEUDO_ELEMENT_ATTR, "yes");
- visualParent.appendChild(visualPseudoElement);
- }
- }
-
- public boolean isEmptyElement(nsIDOMNode visualParent) {
- nsIDOMNodeList visualNodes = visualParent.getChildNodes();
- long len = visualNodes.getLength();
-
- if ((len == 0) || (len == 1 && isEmptyText(visualNodes.item(0)))) {
- return true;
- }
-
- return false;
- }
-
- public boolean isEmptyDocument() {
- nsIDOMNodeList visualNodes = visualContentArea.getChildNodes();
- long len = visualNodes.getLength();
- if ((len == 0)
- || (len == 1 && (isEmptyText(visualNodes.item(0)) || isPseudoElement(visualNodes
- .item(0))))) {
- return true;
- }
-
- return false;
- }
-
- private boolean isEmptyText(nsIDOMNode visualNode) {
- if (visualNode == null
- || (visualNode.getNodeType() != nsIDOMNode.TEXT_NODE)) {
- return false;
- }
-
- if (visualNode.getNodeValue().trim().length() == 0) {
- return true;
- }
-
- return false;
- }
-
- // ==========================================================
-
- public void updateNode(Node sourceNode) {
- if (sourceNode == null)
- return;
-
- switch (sourceNode.getNodeType()) {
- case Node.DOCUMENT_NODE:
- rebuildDom((Document) sourceNode);
- break;
- case Node.COMMENT_NODE:
- updateComment(sourceNode);
- break;
- default:
- updateElement(getNodeForUpdate(sourceNode));
- }
- }
-
- // TODO Ssergey Vasilyev make a common code for figuring out
- // if it is need to update parent node or not
- private Node getNodeForUpdate(Node sourceNode) {
- /* Changing of <tr> or <td> tags can affect whole the table */
- Node sourceTable = getParentTable(sourceNode, 2);
- if (sourceTable != null) {
- return sourceTable;
- }
-
- /* Changing of an <option> tag can affect the parent select */
- Node sourceSelect = getParentSelect(sourceNode);
- if (sourceSelect != null) {
- return sourceSelect;
- }
-
- return sourceNode;
- }
-
- private void updateComment(Node sourceNode) {
- VpeNodeMapping mapping = domMapping.getNodeMapping(sourceNode);
- if (mapping != null
- && mapping.getType() == VpeNodeMapping.COMMENT_MAPPING) {
- nsIDOMNodeList visualNodes = mapping.getVisualNode()
- .getChildNodes();
-
- if (visualNodes.getLength() > 0) {
- visualNodes.item(0).setNodeValue(sourceNode.getNodeValue());
- }
- }
- }
-
- private void updateElement(Node sourceNode) {
- VpeElementMapping elementMapping = null;
- VpeNodeMapping nodeMapping = domMapping.getNodeMapping(sourceNode);
- if (nodeMapping instanceof VpeElementMapping) {
- elementMapping = (VpeElementMapping) nodeMapping;
- if (elementMapping != null && elementMapping.getTemplate() != null) {
- Node updateNode = elementMapping.getTemplate()
- .getNodeForUptate(pageContext,
- elementMapping.getSourceNode(),
- elementMapping.getVisualNode(),
- elementMapping.getData());
- if (updateNode != null && updateNode != sourceNode) {
- updateNode(updateNode);
- return;
- }
- }
- }
- nsIDOMNode visualOldNode = domMapping.remove(sourceNode);
+ if (border != null)
+ return border;
+ else
+ return visualNewElement;
+ case Node.TEXT_NODE:
+ return createTextNode(sourceNode, registerFlag);
+ case Node.COMMENT_NODE:
+ if (!YES_STRING.equals(VpePreference.SHOW_COMMENTS.getValue())) {
+ return null;
+ }
+ nsIDOMElement visualNewComment = createComment(sourceNode);
+ if (registerFlag) {
+ registerNodes(new VpeNodeMapping(sourceNode, visualNewComment));
+ }
+ return visualNewComment;
+ }
+ return null;
+ }
+
+ private void correctVisualAttribute(nsIDOMElement element) {
+
+ String styleValue = element.getAttribute(HTML.TAG_STYLE);
+ String backgroundValue = element
+ .getAttribute(VpeStyleUtil.PARAMETR_BACKGROND);
+
+ if (styleValue != null) {
+ styleValue = VpeStyleUtil.addFullPathIntoURLValue(styleValue,
+ pageContext.getEditPart().getEditorInput());
+ element.setAttribute(HTML.TAG_STYLE, styleValue);
+ }
+ if (backgroundValue != null) {
+ backgroundValue = VpeStyleUtil
+ .addFullPathIntoBackgroundValue(backgroundValue,
+ pageContext.getEditPart().getEditorInput());
+ element.setAttribute(VpeStyleUtil.PARAMETR_BACKGROND,
+ backgroundValue);
+ }
+ }
+
+ protected nsIDOMElement createComment(Node sourceNode) {
+ nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV);
+ div.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, COMMENT_STYLE);
+ String value = COMMENT_PREFIX + sourceNode.getNodeValue()
+ + COMMENT_SUFFIX;
+ nsIDOMText text = visualDocument.createTextNode(value);
+ div.appendChild(text);
+ return div;
+ }
+
+ protected void addChildren(VpeTemplate containerTemplate,
+ Node sourceContainer, nsIDOMNode visualContainer) {
+ NodeList sourceNodes = sourceContainer.getChildNodes();
+ int len = sourceNodes.getLength();
+ int childrenCount = 0;
+ for (int i = 0; i < len; i++) {
+ Node sourceNode = sourceNodes.item(i);
+ if (addNode(sourceNode, null, visualContainer)) {
+ childrenCount++;
+ }
+ }
+ if (childrenCount == 0) {
+ setPseudoContent(containerTemplate, sourceContainer,
+ visualContainer);
+ }
+ }
+
+ protected void addChildren(VpeTemplate containerTemplate,
+ Node sourceContainer, nsIDOMNode visualOldContainer,
+ List<?> childrenInfoList) {
+ for (int i = 0; i < childrenInfoList.size(); i++) {
+ VpeChildrenInfo info = (VpeChildrenInfo) childrenInfoList.get(i);
+ nsIDOMNode visualParent = info.getVisualParent();
+ if (visualParent == null)
+ visualParent = visualOldContainer;
+ List<?> sourceChildren = info.getSourceChildren();
+ int childrenCount = 0;
+ if (sourceChildren != null) {
+ for (int j = 0; j < sourceChildren.size(); j++) {
+ if (addNode((Node) sourceChildren.get(j), null,
+ visualParent)) {
+ childrenCount++;
+ }
+ }
+ }
+ if (childrenCount == 0 && childrenInfoList.size() == 0) {
+ setPseudoContent(containerTemplate, sourceContainer,
+ visualParent);
+ }
+ }
+ }
+
+ // /////////////////////////////////////////////////////////////////////////
+ public nsIDOMNode addStyleNodeToHead(String styleText) {
+ nsIDOMNode newStyle = visualDocument
+ .createElement(VpeStyleUtil.ATTRIBUTE_STYLE);
+
+ if (styleText != null) {
+ nsIDOMText newText = visualDocument.createTextNode(styleText);
+ newStyle.appendChild(newText);
+ }
+ headNode.appendChild(newStyle);
+ return newStyle;
+ }
+
+ public nsIDOMNode replaceStyleNodeToHead(nsIDOMNode oldStyleNode,
+ String styleText) {
+ nsIDOMElement newStyle = visualDocument
+ .createElement(VpeStyleUtil.ATTRIBUTE_STYLE);
+
+ if (styleText != null) {
+ nsIDOMNode newText = visualDocument.createTextNode(styleText);
+ newStyle.appendChild(newText);
+ }
+
+ headNode.replaceChild(newStyle, oldStyleNode);
+ return newStyle;
+ }
+
+ public void removeStyleNodeFromHead(nsIDOMNode oldStyleNode) {
+ headNode.removeChild(oldStyleNode);
+ }
+
+ void addExternalLinks() {
+ IEditorInput input = pageContext.getEditPart().getEditorInput();
+ IFile file = null;
+ if (input instanceof IFileEditorInput) {
+ file = ((IFileEditorInput) input).getFile();
+ }
+ ResourceReference[] l = null;
+ if (file != null) {
+ l = CSSReferenceList.getInstance().getAllResources(file);
+ }
+ if (l != null) {
+ for (int i = 0; i < l.length; i++) {
+ ResourceReference item = l[i];
+ addLinkNodeToHead("file:///" + item.getLocation(), YES_STRING);
+ }
+ }
+ }
+
+ void removeExternalLinks() {
+ nsIDOMNodeList childs = headNode.getChildNodes();
+ long length = childs.getLength();
+ for (long i = length - 1; i >= 0; i--) {
+ nsIDOMNode node = childs.item(i);
+ if (node.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
+ boolean isLink = false;
+ boolean isStyle = false;
+ if ((isLink = HTML.TAG_LINK
+ .equalsIgnoreCase(node.getNodeName()))
+ || (isStyle = HTML.TAG_STYLE.equalsIgnoreCase(node
+ .getNodeName()))) {
+ nsIDOMElement element = (nsIDOMElement) node
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
+ if ((isLink || (isStyle && ATTR_VPE_INLINE_LINK_VALUE
+ .equalsIgnoreCase(element.getAttribute(ATTR_VPE))))
+ && YES_STRING.equalsIgnoreCase(element
+ .getAttribute("ext"))) {
+ headNode.removeChild(node);
+ }
+ }
+ }
+ }
+ }
+
+ void refreshExternalLinks() {
+ removeExternalLinks();
+ addExternalLinks();
+ }
+
+ // ==========================================================
+ void resetPseudoElement(nsIDOMNode visualNode) {
+ if (visualNode != null) {
+ nsIDOMNode visualParent = visualNode.getParentNode();
+ if (visualParent != null) {
+ PseudoInfo info = getPseudoInfo(visualParent);
+ if (info.pseudoNode == null && !info.isElements) {
+ addPseudoElementImpl(visualParent);
+ } else if (info.pseudoNode != null && info.isElements) {
+ visualParent.removeChild(info.pseudoNode);
+ }
+ }
+ }
+ }
+
+ private PseudoInfo getPseudoInfo(nsIDOMNode visualParent) {
+ nsIDOMNode pseudoNode = null;
+ boolean isElements = false;
+
+ if (visualParent == null)
+ return new PseudoInfo();
+ nsIDOMNodeList visualNodes = visualParent.getChildNodes();
+ if (visualNodes == null)
+ return new PseudoInfo();
+
+ long length = visualNodes.getLength();
+ for (long i = 0; i < length; i++) {
+ nsIDOMNode visualNode = visualNodes.item(i);
+ if (pseudoNode == null && isPseudoElement(visualNode)) {
+ pseudoNode = visualNode;
+ } else if (!isEmptyText(visualNode)) {
+ isElements = true;
+ }
+ if (pseudoNode != null && isElements) {
+ break;
+ }
+ }
+ return new PseudoInfo(pseudoNode, isElements);
+ }
+
+ static boolean isInitElement(nsIDOMNode visualNode) {
+ if (visualNode == null) {
+ return false;
+ }
+
+ if (visualNode.getNodeType() != Node.ELEMENT_NODE) {
+ return false;
+ }
+
+ if (YES_STRING.equalsIgnoreCase(((nsIDOMElement) visualNode)
+ .getAttribute(INIT_ELEMENT_ATTR))) {
+ return true;
+ }
+
+ return false;
+ }
+
+ static boolean isPseudoElement(nsIDOMNode visualNode) {
+ if (visualNode == null) {
+ return false;
+ }
+
+ if (visualNode.getNodeType() != Node.ELEMENT_NODE) {
+ return false;
+ }
+
+ if (YES_STRING.equalsIgnoreCase(((nsIDOMElement) visualNode
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
+ .getAttribute(PSEUDO_ELEMENT_ATTR))) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private void setPseudoContent(VpeTemplate containerTemplate,
+ Node sourceContainer, nsIDOMNode visualContainer) {
+ if (containerTemplate != null) {
+ containerTemplate.setPseudoContent(pageContext, sourceContainer,
+ visualContainer, visualDocument);
+ } else {
+ VpeDefaultPseudoContentCreator.getInstance().setPseudoContent(
+ pageContext, sourceContainer, visualContainer,
+ visualDocument);
+ }
+
+ // if (isEmptyElement(visualContainer)) {
+ // addPseudoElementImpl(visualContainer);
+ // }
+ }
+
+ private void addPseudoElementImpl(nsIDOMNode visualParent) {
+ if (!templateManager.isWithoutPseudoElementContainer(visualParent
+ .getNodeName())) {
+ if (VpeDebug.VISUAL_ADD_PSEUDO_ELEMENT) {
+ System.out.println("-------------------- addPseudoElement: "
+ + visualParent.getNodeName());
+ }
+ nsIDOMElement visualPseudoElement = visualDocument
+ .createElement(PSEUDO_ELEMENT);
+ visualPseudoElement.setAttribute(PSEUDO_ELEMENT_ATTR, "yes");
+ visualParent.appendChild(visualPseudoElement);
+ }
+ }
+
+ public boolean isEmptyElement(nsIDOMNode visualParent) {
+ nsIDOMNodeList visualNodes = visualParent.getChildNodes();
+ long len = visualNodes.getLength();
+
+ if ((len == 0) || (len == 1 && isEmptyText(visualNodes.item(0)))) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public boolean isEmptyDocument() {
+ nsIDOMNodeList visualNodes = visualContentArea.getChildNodes();
+ long len = visualNodes.getLength();
+ if ((len == 0)
+ || (len == 1 && (isEmptyText(visualNodes.item(0)) || isPseudoElement(visualNodes
+ .item(0))))) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean isEmptyText(nsIDOMNode visualNode) {
+ if (visualNode == null
+ || (visualNode.getNodeType() != nsIDOMNode.TEXT_NODE)) {
+ return false;
+ }
+
+ if (visualNode.getNodeValue().trim().length() == 0) {
+ return true;
+ }
+
+ return false;
+ }
+
+ // ==========================================================
+
+ public void updateNode(Node sourceNode) {
+ if (sourceNode == null)
+ return;
+
+ switch (sourceNode.getNodeType()) {
+ case Node.DOCUMENT_NODE:
+ rebuildDom((Document) sourceNode);
+ break;
+ case Node.COMMENT_NODE:
+ updateComment(sourceNode);
+ break;
+ default:
+ updateElement(getNodeForUpdate(sourceNode));
+ }
+ }
+
+ // TODO Ssergey Vasilyev make a common code for figuring out
+ // if it is need to update parent node or not
+ private Node getNodeForUpdate(Node sourceNode) {
+ /* Changing of <tr> or <td> tags can affect whole the table */
+ Node sourceTable = getParentTable(sourceNode, 2);
+ if (sourceTable != null) {
+ return sourceTable;
+ }
+
+ /* Changing of an <option> tag can affect the parent select */
+ Node sourceSelect = getParentSelect(sourceNode);
+ if (sourceSelect != null) {
+ return sourceSelect;
+ }
+
+ return sourceNode;
+ }
+
+ private void updateComment(Node sourceNode) {
+ VpeNodeMapping mapping = domMapping.getNodeMapping(sourceNode);
+ if (mapping != null
+ && mapping.getType() == VpeNodeMapping.COMMENT_MAPPING) {
+ nsIDOMNodeList visualNodes = mapping.getVisualNode()
+ .getChildNodes();
+
+ if (visualNodes.getLength() > 0) {
+ visualNodes.item(0).setNodeValue(sourceNode.getNodeValue());
+ }
+ }
+ }
+
+ private void updateElement(Node sourceNode) {
+ VpeElementMapping elementMapping = null;
+ VpeNodeMapping nodeMapping = domMapping.getNodeMapping(sourceNode);
+ if (nodeMapping instanceof VpeElementMapping) {
+ elementMapping = (VpeElementMapping) nodeMapping;
+ if (elementMapping != null && elementMapping.getTemplate() != null) {
+ Node updateNode = elementMapping.getTemplate()
+ .getNodeForUptate(pageContext,
+ elementMapping.getSourceNode(),
+ elementMapping.getVisualNode(),
+ elementMapping.getData());
+ if (updateNode != null && updateNode != sourceNode) {
+ updateNode(updateNode);
+ return;
+ }
+ }
+ }
+ nsIDOMNode visualOldNode = domMapping.remove(sourceNode);
getSourceNodes().remove(sourceNode);
if (sourceNode instanceof INodeNotifier) {
((INodeNotifier) sourceNode).removeAdapter(getSorceAdapter());
}
- if (visualOldNode != null) {
- if (elementMapping != null) {
- nsIDOMElement border = elementMapping.getBorder();
- if (border != null) {
- visualOldNode = border;
- }
- }
- nsIDOMNode visualContainer = visualOldNode.getParentNode();
- nsIDOMNode visualNextNode = visualOldNode.getNextSibling();
- if (visualContainer != null) {
- visualContainer.removeChild(visualOldNode);
- addNode(sourceNode, visualNextNode, visualContainer);
- }
- } else {
+ if (visualOldNode != null) {
+ if (elementMapping != null) {
+ nsIDOMElement border = elementMapping.getBorder();
+ if (border != null) {
+ visualOldNode = border;
+ }
+ }
+ nsIDOMNode visualContainer = visualOldNode.getParentNode();
+ nsIDOMNode visualNextNode = visualOldNode.getNextSibling();
+ if (visualContainer != null) {
+ visualContainer.removeChild(visualOldNode);
+ addNode(sourceNode, visualNextNode, visualContainer);
+ }
+ } else {
//Max Areshkau Why we need update parent node when we update text node?
//lookd like we haven't need do it.
- if (sourceNode.getNodeType() == Node.TEXT_NODE) {
- updateNode(sourceNode.getParentNode());
- }
- }
- }
-
- public void removeNode(Node sourceNode) {
- domMapping.remove(sourceNode);
+ if (sourceNode.getNodeType() == Node.TEXT_NODE) {
+ updateNode(sourceNode.getParentNode());
+ }
+ }
+ }
+
+ public void removeNode(Node sourceNode) {
+ domMapping.remove(sourceNode);
getSourceNodes().remove(sourceNode);
if (sourceNode instanceof INodeNotifier) {
((INodeNotifier) sourceNode).removeAdapter(getSorceAdapter());
}
- }
-
- private Node getParentTable(Node sourceNode, int depth) {
- Node parentNode = sourceNode.getParentNode();
- for (int i = 0; parentNode != null && i < depth; parentNode = parentNode
- .getParentNode(), i++) {
- if (HTML.TAG_TABLE.equalsIgnoreCase(parentNode.getNodeName())) {
- return parentNode;
- }
- }
- return null;
- }
-
- private Node getParentSelect(Node sourceNode) {
- if (HTML.TAG_OPTION.equalsIgnoreCase(sourceNode.getNodeName())) {
- Node parentNode = sourceNode.getParentNode();
- if (HTML.TAG_SELECT.equalsIgnoreCase(parentNode.getNodeName())) {
- return parentNode;
- }
- }
- return null;
- }
-
+ }
+
+ private Node getParentTable(Node sourceNode, int depth) {
+ Node parentNode = sourceNode.getParentNode();
+ for (int i = 0; parentNode != null && i < depth; parentNode = parentNode
+ .getParentNode(), i++) {
+ if (HTML.TAG_TABLE.equalsIgnoreCase(parentNode.getNodeName())) {
+ return parentNode;
+ }
+ }
+ return null;
+ }
+
+ private Node getParentSelect(Node sourceNode) {
+ if (HTML.TAG_OPTION.equalsIgnoreCase(sourceNode.getNodeName())) {
+ Node parentNode = sourceNode.getParentNode();
+ if (HTML.TAG_SELECT.equalsIgnoreCase(parentNode.getNodeName())) {
+ return parentNode;
+ }
+ }
+ return null;
+ }
+
// public void setText(Node sourceText) {
// Node sourceParent = sourceText.getParentNode();
// if (sourceParent != null && sourceParent.getLocalName() != null) {
@@ -888,1206 +890,1206 @@
// return;
// }
public boolean setText(Node sourceText) {
- Node sourceParent = sourceText.getParentNode();
- if (sourceParent != null && sourceParent.getLocalName() != null) {
- String sourceParentName = sourceParent.getLocalName();
- if (HTML.TAG_TEXTAREA.equalsIgnoreCase(sourceParentName)
- || HTML.TAG_OPTION.equalsIgnoreCase(sourceParentName)) {
- updateNode(sourceText.getParentNode());
+ Node sourceParent = sourceText.getParentNode();
+ if (sourceParent != null && sourceParent.getLocalName() != null) {
+ String sourceParentName = sourceParent.getLocalName();
+ if (HTML.TAG_TEXTAREA.equalsIgnoreCase(sourceParentName)
+ || HTML.TAG_OPTION.equalsIgnoreCase(sourceParentName)) {
+ updateNode(sourceText.getParentNode());
return true;
- }
- }
- nsIDOMNode visualText = domMapping.getVisualNode(sourceText);
- if (visualText != null) {
- String visualValue = TextUtil.visualText(sourceText.getNodeValue());
- visualText.setNodeValue(visualValue);
- } else {
- VpeNodeMapping nodeMapping = domMapping
- .getNodeMapping(sourceParent);
- if (nodeMapping != null
- && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
- VpeTemplate template = ((VpeElementMapping) nodeMapping)
- .getTemplate();
- if (template != null) {
- if (!template.containsText()) {
+ }
+ }
+ nsIDOMNode visualText = domMapping.getVisualNode(sourceText);
+ if (visualText != null) {
+ String visualValue = TextUtil.visualText(sourceText.getNodeValue());
+ visualText.setNodeValue(visualValue);
+ }else {
+ VpeNodeMapping nodeMapping = domMapping
+ .getNodeMapping(sourceParent);
+ if (nodeMapping != null
+ && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
+ VpeTemplate template = ((VpeElementMapping) nodeMapping)
+ .getTemplate();
+ if (template != null) {
+ if (!template.containsText()) {
return false;
- }
- }
- }
- updateNode(sourceText);
+ }
+ }
+ }
+ updateNode(sourceText);
return true;
- }
+ }
// }
// updateNode(sourceText);
return false;
- }
+ }
// }
-
- public void setAttribute(Element sourceElement, String name, String value) {
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(sourceElement);
- if (elementMapping != null) {
- if (elementMapping.isIfDependencyFromAttribute(name)) {
- updateElement(sourceElement);
- } else {
- VpeTemplate template = elementMapping.getTemplate();
- if (elementMapping.getBorder() != null) {
- updateElement(sourceElement);
- } else if (template.isRecreateAtAttrChange(pageContext,
- sourceElement, visualDocument,
- (nsIDOMElement) elementMapping.getVisualNode(),
- elementMapping.getData(), name, value)) {
- updateElement(sourceElement);
- } else {
- nsIDOMElement visualElement = (nsIDOMElement) elementMapping
- .getVisualNode();
- if (visualElement != null) {
- String visualElementName = visualElement.getNodeName();
- if (HTML.TAG_SELECT.equalsIgnoreCase(visualElementName)) {
- updateElement(sourceElement);
- return;
- } else if (HTML.TAG_OPTION
- .equalsIgnoreCase(visualElementName)) {
- updateElement(sourceElement.getParentNode());
- return;
- } else if (HTML.TAG_INPUT
- .equalsIgnoreCase(visualElementName)) {
- updateElement(sourceElement);
- }
- }
- setXmlnsAttribute(elementMapping, name, value);
- template.setAttribute(pageContext, sourceElement,
- visualDocument, visualElement, elementMapping
- .getData(), name, value);
- resetTooltip(sourceElement, visualElement);
- }
- }
- }
- }
-
- public void stopToggle(Node sourceNode) {
- if (!(sourceNode instanceof Element))
- return;
-
- Element sourceElement = (Element) sourceNode;
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(sourceElement);
- if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
-
- if (template instanceof VpeToggableTemplate) {
- ((VpeToggableTemplate) template).stopToggling(sourceElement);
- }
- }
- }
-
- public boolean doToggle(nsIDOMNode visualNode) {
- if (visualNode == null)
- return false;
- nsIDOMElement visualElement = null;
- try {
-
- visualElement = (nsIDOMElement) visualNode
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
- } catch (XPCOMException exception) {
- visualElement = (nsIDOMElement) visualNode.getParentNode()
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
- }
- if (visualElement == null)
- return false;
-
- nsIDOMAttr toggleIdAttr = visualElement
- .getAttributeNode("vpe-user-toggle-id");
- if (toggleIdAttr == null)
- return false;
- String toggleId = toggleIdAttr.getNodeValue();
-
- if (toggleId == null)
- return false;
-
- boolean toggleLookup = false;
- nsIDOMAttr toggleLookupAttr = visualElement
- .getAttributeNode("vpe-user-toggle-lookup-parent");
- if (toggleLookupAttr != null) {
- toggleLookup = "true".equals(toggleLookupAttr.getNodeValue());
- }
-
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(getLastSelectedElement());
- Node sourceNode = (Node) domMapping
- .getSourceNode(getLastSelectedElement());
- if (sourceNode == null)
- return false;
-
- Element sourceElement = (Element) (sourceNode instanceof Element ? sourceNode
- : sourceNode.getParentNode());
-
- if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
-
- while (toggleLookup && sourceElement != null
- && !(template instanceof VpeToggableTemplate)) {
- sourceElement = (Element) sourceElement.getParentNode();
- if (sourceElement == null)
- break;
- elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(sourceElement);
- if (elementMapping == null)
- continue;
- template = elementMapping.getTemplate();
- }
-
- if (template instanceof VpeToggableTemplate) {
- ((VpeToggableTemplate) template).toggle(this, sourceElement,
- toggleId);
- updateElement(sourceElement);
- return true;
- }
- }
- return false;
- }
-
- public void removeAttribute(Element sourceElement, String name) {
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(sourceElement);
- if (elementMapping != null) {
- if (elementMapping.isIfDependencyFromAttribute(name)) {
- updateElement(sourceElement);
- } else {
- VpeTemplate template = elementMapping.getTemplate();
- if (template.isRecreateAtAttrChange(pageContext, sourceElement,
- visualDocument, (nsIDOMElement) elementMapping
- .getVisualNode(), elementMapping.getData(),
- name, null)) {
- updateElement(sourceElement);
- } else {
- removeXmlnsAttribute(elementMapping, name);
- template.removeAttribute(pageContext, sourceElement,
- visualDocument, (nsIDOMElement) elementMapping
- .getVisualNode(), elementMapping.getData(),
- name);
- resetTooltip(sourceElement, (nsIDOMElement) elementMapping
- .getVisualNode());
- }
- }
- }
- }
-
- public void refreshBundleValues(Element sourceElement) {
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(sourceElement);
- if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
- template.refreshBundleValues(pageContext, sourceElement,
- elementMapping.getData());
- }
- }
-
- boolean isContentArea(nsIDOMNode visualNode) {
- return visualContentArea.equals(visualNode);
- }
-
- nsIDOMElement getContentArea() {
- return visualContentArea;
- }
-
- void setSelectionRectangle(nsIDOMElement visualElement) {
- setSelectionRectangle(visualElement, true);
- }
-
- void setSelectionRectangle(nsIDOMElement visualElement, boolean scroll) {
- int resizerConstrains = getResizerConstrains(visualElement);
- visualEditor.setSelectionRectangle(visualElement, resizerConstrains,
- scroll);
- }
-
- public nsIDOMNode addLinkNodeToHead(String href_val, String ext_val) {
- nsIDOMElement newNode = createLinkNode(href_val,
- ATTR_REL_STYLESHEET_VALUE, ext_val);
- headNode.appendChild(newNode);
- return newNode;
- }
-
- public nsIDOMNode replaceLinkNodeToHead(nsIDOMNode oldNode,
- String href_val, String ext_val) {
- nsIDOMNode newNode = createLinkNode(href_val,
- ATTR_REL_STYLESHEET_VALUE, ext_val);
- headNode.replaceChild(newNode, oldNode);
- return newNode;
- }
-
- public nsIDOMNode replaceLinkNodeToHead(String href_val, String ext_val) {
- nsIDOMNode newNode = null;
- nsIDOMNode oldNode = getLinkNode(href_val, ext_val);
- if (oldNode == null) {
- newNode = addLinkNodeToHead(href_val, ext_val);
- }
- return newNode;
- }
-
- public void removeLinkNodeFromHead(nsIDOMNode node) {
- headNode.removeChild(node);
- }
-
- private nsIDOMElement createLinkNode(String href_val, String rel_val,
- String ext_val) {
- nsIDOMElement linkNode = null;
- if ((ATTR_REL_STYLESHEET_VALUE.equalsIgnoreCase(rel_val))
- && href_val.startsWith("file:")) {
- /*
- * Because of the Mozilla caches the linked css files we replace tag
- * <link rel="styleseet" href="file://..."> with tag <style
- * vpe="ATTR_VPE_INLINE_LINK_VALUE">file content</style> It is
- * LinkReplacer
- */
- linkNode = visualDocument.createElement(HTML.TAG_STYLE);
- linkNode.setAttribute(ATTR_VPE, ATTR_VPE_INLINE_LINK_VALUE);
-
- /* Copy links attributes into our <style> */
- linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_HREF, href_val);
- linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_EXT, ext_val);
- try {
- StringBuffer styleText = new StringBuffer(EMPTY_STRING);
- URL url = new URL((new Path(href_val)).toOSString());
- String fileName = url.getFile();
- BufferedReader in = new BufferedReader(new FileReader(
- (fileName)));
- String str = EMPTY_STRING;
- while ((str = in.readLine()) != null) {
- styleText.append(str);
- }
-
- String styleForParse = styleText.toString();
- styleForParse = VpeStyleUtil.addFullPathIntoURLValue(
- styleForParse, href_val);
-
- in.close();
- nsIDOMText textNode = visualDocument
- .createTextNode(styleForParse);
- linkNode.appendChild(textNode);
- return linkNode;
- } catch (FileNotFoundException fnfe) {
- /* File which was pointed by user is not exists. Do nothing. */
- } catch (IOException ioe) {
- VpePlugin.getPluginLog().logError(ioe.getMessage(), ioe);
- }
- }
-
- linkNode = visualDocument.createElement(HTML.TAG_LINK);
- linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_REL, rel_val);
- linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_HREF, href_val);
- linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_EXT, ext_val);
-
- return linkNode;
- }
-
- private boolean isLinkReplacer(nsIDOMNode node) {
- return HTML.TAG_STYLE.equalsIgnoreCase(node.getNodeName())
- && ATTR_VPE_INLINE_LINK_VALUE
- .equalsIgnoreCase(((nsIDOMElement) node
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
- .getAttribute(ATTR_VPE));
- }
-
- private nsIDOMNode getLinkNode(String href_val, String ext_val) {
- nsIDOMNodeList children = headNode.getChildNodes();
- long len = children.getLength();
- for (long i = len - 1; i >= 0; i--) {
- nsIDOMNode node = children.item(i);
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- if (HTML.TAG_LINK.equalsIgnoreCase(node.getNodeName())
- || isLinkReplacer(node)) {
- nsIDOMElement element = (nsIDOMElement) node
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
- if (ext_val.equalsIgnoreCase(element
- .getAttribute(VpeTemplateManager.ATTR_LINK_EXT))
- && href_val
- .equalsIgnoreCase(element
- .getAttribute(VpeTemplateManager.ATTR_LINK_HREF))) {
- return node;
- }
- }
- }
- }
- return null;
- }
-
- private void cleanHead() {
- nsIDOMNodeList children = headNode.getChildNodes();
- long len = children.getLength();
- for (long i = len - 1; i >= 0; i--) {
- nsIDOMNode node = children.item(i);
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- String name = node.getNodeName();
- if (HTML.TAG_LINK.equalsIgnoreCase(name)
- || isLinkReplacer(node)) {
- if (NO_STRING.equalsIgnoreCase(((nsIDOMElement) node
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
- .getAttribute("ext"))) {
- // int linkAddress =
- // MozillaSupports.queryInterface(node,
- // nsIStyleSheetLinkingElement.NS_ISTYLESHEETLINKINGELEMENT_IID);
- // nsIStyleSheetLinkingElement linkingElement = new
- // nsIStyleSheetLinkingElement(linkAddress);
- // linkingElement.removeStyleSheet();
- node = headNode.removeChild(node);
- }
- } else if (HTML.TAG_STYLE.equalsIgnoreCase(node.getNodeName())
- && (!YES_STRING
- .equalsIgnoreCase(((nsIDOMElement) node
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
- .getAttribute(ATTR_VPE)))) {
- node = headNode.removeChild(node);
- }
- }
- }
- }
-
- private class PseudoInfo {
- private nsIDOMNode pseudoNode;
- private boolean isElements;
-
- private PseudoInfo() {
- this(null, false);
- }
-
- private PseudoInfo(nsIDOMNode pseudoNode, boolean isElements) {
- this.pseudoNode = pseudoNode;
- this.isElements = isElements;
- }
- }
-
- void showDragCaret(nsIDOMNode node, int offset) {
- xulRunnerEditor.showDragCaret(node, offset);
- }
-
- void hideDragCaret() {
-
- xulRunnerEditor.hideDragCaret();
- }
-
- private int getResizerConstrains(nsIDOMNode visualNode) {
- VpeNodeMapping nodeMapping = domMapping.getNodeMapping(visualNode);
- if (nodeMapping != null
- && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
- return ((VpeElementMapping) nodeMapping).getTemplate()
- .getTagDescription(pageContext,
- (Element) nodeMapping.getSourceNode(),
- visualDocument,
- (nsIDOMElement) nodeMapping.getVisualNode(),
- ((VpeElementMapping) nodeMapping).getData())
- .getResizeConstrains();
- }
- return VpeTagDescription.RESIZE_CONSTRAINS_NONE;
- }
-
- public void resize(nsIDOMElement element, int resizerConstrains, int top,
- int left, int width, int height) {
- VpeElementMapping elementMapping = (VpeElementMapping) domMapping
- .getNodeMapping(element);
- if (elementMapping != null) {
- elementMapping.getTemplate().resize(pageContext,
- (Element) elementMapping.getSourceNode(), visualDocument,
- element, elementMapping.getData(), resizerConstrains, top,
- left, width, height);
- }
- }
-
- static boolean isAnonElement(nsIDOMNode visualNode) {
- if (visualNode != null
- && visualNode.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
- String attrValue = ((nsIDOMElement) visualNode
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
- .getAttribute(MOZ_ANONCLASS_ATTR);
-
- return attrValue != null && attrValue.length() > 0;
- }
-
- return false;
- }
-
- boolean canInnerDrag(nsIDOMElement visualDragElement) {
- VpeNodeMapping node = domMapping.getNodeMapping(visualDragElement);
- if (node instanceof VpeElementMapping) {
- VpeElementMapping elementMapping = (VpeElementMapping) node;
- if (elementMapping != null) {
- return elementMapping.getTemplate().canInnerDrag(pageContext,
- (Element) elementMapping.getSourceNode(),
- visualDocument, visualDragElement,
- elementMapping.getData());
- }
- }
- return false;
- }
-
- VpeSourceInnerDropInfo getSourceInnerDropInfo(Node sourceDragNode,
- VpeVisualInnerDropInfo visualDropInfo, boolean checkParentTemplates) {
- nsIDOMNode visualDropContainer = visualDropInfo.getDropContainer();
- long visualDropOffset = visualDropInfo.getDropOffset();
- Node sourceDropContainer = null;
- int sourceDropOffset = 0;
-
- switch (visualDropContainer.getNodeType()) {
- case nsIDOMNode.ELEMENT_NODE:
- nsIDOMNode visualOffsetNode = null;
- boolean afterFlag = false;
- long visualChildCount = VisualDomUtil
- .getChildCount(visualDropContainer);
- if (visualDropOffset < visualChildCount) {
- visualOffsetNode = VisualDomUtil.getChildNode(
- visualDropContainer, visualDropOffset);
- if (isPseudoElement(visualOffsetNode)
- || isAnonElement(visualOffsetNode)) {
- visualOffsetNode = getLastAppreciableVisualChild(visualDropContainer);
- afterFlag = true;
- }
- } else {
- visualOffsetNode = getLastAppreciableVisualChild(visualDropContainer);
- afterFlag = visualChildCount != 0;
- }
- if (visualOffsetNode != null) {
- Node sourceOffsetNode = domMapping
- .getSourceNode(visualOffsetNode);
- if (sourceOffsetNode != null) {
- sourceDropContainer = sourceOffsetNode.getParentNode();
- sourceDropOffset = ((NodeImpl) sourceOffsetNode).getIndex();
- if (afterFlag) {
- sourceDropOffset++;
- }
- }
- }
- if (sourceDropContainer == null) {
- sourceDropContainer = domMapping
- .getNearSourceNode(visualDropContainer);
- if (sourceDropContainer != null) {
- sourceDropOffset = sourceDropContainer.getChildNodes()
- .getLength();
- }
- }
- if (sourceDropContainer == null) {
- sourceDropContainer = domMapping
- .getNearSourceNode(visualContentArea);
- sourceDropOffset = sourceDropContainer.getChildNodes()
- .getLength();
- }
- break;
- case nsIDOMNode.TEXT_NODE:
- VpeNodeMapping nodeMapping = domMapping
- .getNearNodeMapping(visualDropContainer);
- switch (nodeMapping.getType()) {
- case VpeNodeMapping.TEXT_MAPPING:
- sourceDropContainer = nodeMapping.getSourceNode();
- sourceDropOffset = TextUtil.sourceInnerPosition(
- sourceDropContainer.getNodeValue(), visualDropOffset);
- break;
- case VpeNodeMapping.ELEMENT_MAPPING:
- // it's attribute
- if (isTextEditable(visualDropContainer)) {
- String[] atributeNames = ((VpeElementMapping) nodeMapping)
- .getTemplate().getOutputAtributeNames();
- if (atributeNames != null && atributeNames.length > 0) {
- Element sourceElement = (Element) nodeMapping
- .getSourceNode();
- sourceDropContainer = sourceElement
- .getAttributeNode(atributeNames[0]);
- sourceDropOffset = TextUtil.sourceInnerPosition(
- sourceDropContainer.getNodeValue(),
- visualDropOffset);
- }
- }
- nodeMapping.getVisualNode();
- }
- break;
- }
- if (sourceDropContainer != null) {
- return getSourceInnerDropInfo(sourceDragNode, sourceDropContainer,
- sourceDropOffset, checkParentTemplates);
- } else {
- return new VpeSourceInnerDropInfo(null, 0, false);
- }
- }
-
- VpeSourceInnerDropInfo getSourceInnerDropInfo(Node dragNode,
- Node container, int offset, boolean checkParentsTemplates) {
- // Thread.dumpStack();
- boolean canDrop = false;
- switch (container.getNodeType()) {
- case Node.ELEMENT_NODE:
- VpeNodeMapping nodeMapping = domMapping.getNodeMapping(container);
- if (nodeMapping != null
- && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
- canDrop = ((VpeElementMapping) nodeMapping).getTemplate()
- .canInnerDrop(pageContext, container, dragNode);
- }
- if (!canDrop) {
- if (!checkParentsTemplates)
- return new VpeSourceInnerDropInfo(container, offset,
- canDrop);
- // offset = ((NodeImpl)container).getIndex();
- // container = container.getParentNode();
- // TODO Max Areshkau unclear logic , if we can drop on element
- // why we trying to drop
- // this on parent
- // return getSourceInnerDropInfo(dragNode, container, offset,
- // false);
- return new VpeSourceInnerDropInfo(container, offset, canDrop);
- }
- break;
- case Node.TEXT_NODE:
- case Node.DOCUMENT_NODE:
- canDrop = true;
- break;
- case Node.ATTRIBUTE_NODE:
- canDrop = true;
- break;
- }
- if (canDrop) {
- return new VpeSourceInnerDropInfo(container, offset, canDrop);
- } else {
- return new VpeSourceInnerDropInfo(null, 0, canDrop);
- }
- }
-
- public void innerDrop(Node dragNode, Node container, int offset) {
- VpeNodeMapping mapping = domMapping.getNearNodeMapping(container);
- if (mapping != null) {
- nsIDOMNode visualDropContainer = mapping.getVisualNode();
- switch (mapping.getType()) {
- case VpeNodeMapping.TEXT_MAPPING:
- break;
- case VpeNodeMapping.ELEMENT_MAPPING:
- nsIDOMNode visualParent = visualDropContainer.getParentNode();
- VpeNodeMapping oldMapping = mapping;
- mapping = domMapping.getNearNodeMapping(visualParent);
- if (mapping != null
- && mapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
- ((VpeElementMapping) mapping).getTemplate()
- .innerDrop(
- pageContext,
- new VpeSourceInnerDragInfo(dragNode, 0, 0),
- new VpeSourceInnerDropInfo(container,
- offset, true));
- } else {
- ((VpeElementMapping) oldMapping).getTemplate()
- .innerDrop(
- pageContext,
- new VpeSourceInnerDragInfo(dragNode, 0, 0),
- new VpeSourceInnerDropInfo(container,
- offset, true));
- }
- }
-
- }
- }
-
- void innerDrop(VpeSourceInnerDragInfo dragInfo,
- VpeSourceInnerDropInfo dropInfo) {
- dropper.drop(pageContext, dragInfo, dropInfo);
- }
-
- nsIDOMElement getNearDragElement(Element visualElement) {
- VpeElementMapping elementMapping = domMapping
- .getNearElementMapping(visualElement);
- while (elementMapping != null) {
- if (canInnerDrag(elementMapping.getVisualElement())) {
- return elementMapping.getVisualElement();
- }
- elementMapping = domMapping.getNearElementMapping(elementMapping
- .getVisualNode().getParentNode());
- }
- return null;
- }
-
- nsIDOMElement getDragElement(nsIDOMElement visualElement) {
- VpeElementMapping elementMapping = domMapping
- .getNearElementMapping(visualElement);
- if (elementMapping != null
- && canInnerDrag(elementMapping.getVisualElement())) {
- return elementMapping.getVisualElement();
- }
- return null;
- }
-
- public boolean isTextEditable(nsIDOMNode visualNode) {
- if (visualNode != null) {
- nsIDOMNode parent = visualNode.getParentNode();
- if (parent != null
- && parent.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
- nsIDOMElement element = (nsIDOMElement) parent
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
- nsIDOMAttr style = element.getAttributeNode("style");
- if (style != null) {
- String styleValue = style.getNodeValue();
- String[] items = styleValue.split(";");
- for (int i = 0; i < items.length; i++) {
- String[] item = items[i].split(":");
- if ("-moz-user-modify".equals(item[0].trim())
- && "read-only".equals(item[1].trim())) {
- return false;
- }
- }
- }
- nsIDOMAttr classAttr = element.getAttributeNode("class");
- if (classAttr != null) {
- String classValue = classAttr.getNodeValue().trim();
- if ("__any__tag__caption".equals(classValue)) {
- return false;
- }
- }
- }
- }
- return true;
- }
-
- VpeVisualInnerDropInfo getInnerDropInfo(Node sourceDropContainer,
- int sourceDropOffset) {
- nsIDOMNode visualDropContainer = null;
- long visualDropOffset = 0;
-
- switch (sourceDropContainer.getNodeType()) {
- case Node.TEXT_NODE:
- visualDropContainer = domMapping.getVisualNode(sourceDropContainer);
- visualDropOffset = TextUtil.visualInnerPosition(sourceDropContainer
- .getNodeValue(), sourceDropOffset);
- break;
- case Node.ELEMENT_NODE:
- case Node.DOCUMENT_NODE:
- NodeList sourceChildren = sourceDropContainer.getChildNodes();
- if (sourceDropOffset < sourceChildren.getLength()) {
- Node sourceChild = sourceChildren.item(sourceDropOffset);
- nsIDOMNode visualChild = domMapping.getVisualNode(sourceChild);
- if (visualChild != null) {
- visualDropContainer = visualChild.getParentNode();
-
- visualDropOffset = VisualDomUtil.getOffset(visualChild);
- }
- }
- if (visualDropContainer == null) {
- visualDropContainer = domMapping
- .getNearVisualNode(sourceDropContainer);
- nsIDOMNode visualChild = getLastAppreciableVisualChild(visualDropContainer);
- if (visualChild != null) {
- visualDropOffset = VisualDomUtil.getOffset(visualChild) + 1;
- } else {
- visualDropOffset = 0;
- }
- }
- break;
- case Node.ATTRIBUTE_NODE:
- Element sourceElement = ((Attr) sourceDropContainer)
- .getOwnerElement();
- VpeElementMapping elementMapping = domMapping
- .getNearElementMapping(sourceElement);
- nsIDOMNode textNode = elementMapping.getTemplate()
- .getOutputTextNode(pageContext, sourceElement,
- elementMapping.getData());
- if (textNode != null) {
- visualDropContainer = textNode;
- visualDropOffset = TextUtil.visualInnerPosition(
- sourceDropContainer.getNodeValue(), sourceDropOffset);
- }
- break;
- }
- if (visualDropContainer == null) {
- return null;
- }
- return new VpeVisualInnerDropInfo(visualDropContainer,
- visualDropOffset, 0, 0);
- }
-
- protected void setTooltip(Element sourceElement, nsIDOMElement visualElement) {
- if (visualElement != null && sourceElement != null
- && !((ElementImpl) sourceElement).isJSPTag()) {
- if (HTML.TAG_HTML.equalsIgnoreCase(sourceElement.getNodeName()))
- return;
- String titleValue = getTooltip(sourceElement);
-
- if (titleValue != null) {
- titleValue = titleValue.replaceAll("&", "&");
- titleValue = titleValue.replaceAll("<", "<");
- titleValue = titleValue.replaceAll(">", ">");
- }
-
- if (titleValue != null) {
- // visualElement.setAttribute("title", titleValue);
- setTooltip(visualElement, titleValue);
- }
- }
- }
-
- protected void setTooltip(nsIDOMElement visualElement, String titleValue) {
- visualElement.setAttribute("title", titleValue);
- nsIDOMNodeList children = visualElement.getChildNodes();
- long len = children.getLength();
- for (long i = 0; i < len; i++) {
- nsIDOMNode child = children.item(i);
- if (child.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
- setTooltip(((nsIDOMElement) child
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID)),
- titleValue);
- }
- }
- }
-
- private void resetTooltip(Element sourceElement, nsIDOMElement visualElement) {
- if (visualElement != null && sourceElement != null
- && !((ElementImpl) sourceElement).isJSPTag()) {
- if (HTML.TAG_HTML.equalsIgnoreCase(sourceElement.getNodeName()))
- return;
- String titleValue = getTooltip(sourceElement);
-
- if (titleValue != null) {
- titleValue = titleValue.replaceAll("&", "&");
- titleValue = titleValue.replaceAll("<", "<");
- titleValue = titleValue.replaceAll(">", ">");
- }
-
- if (titleValue != null) {
- resetTooltip(visualElement, titleValue);
- }
- }
- }
-
- private void resetTooltip(nsIDOMElement visualElement, String titleValue) {
- visualElement.setAttribute("title", titleValue);
- nsIDOMNodeList children = visualElement.getChildNodes();
- long len = children.getLength();
- for (long i = 0; i < len; i++) {
- nsIDOMNode child = children.item(i);
- if (child.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
- if (domMapping.getNodeMapping(child) == null) {
- resetTooltip((nsIDOMElement) child
- .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID),
- titleValue);
- }
- }
- }
- }
-
- private String getTooltip(Element sourceElement) {
- StringBuffer buffer = new StringBuffer();
- buffer.append(sourceElement.getNodeName());
- NamedNodeMap attrs = sourceElement.getAttributes();
- int len = attrs.getLength();
- for (int i = 0; i < len; i++) {
- if (i == 7) {
- return buffer.append("\n\t... ").toString();
- }
- int valueLength = attrs.item(i).getNodeValue().length();
- if (valueLength > 30) {
- StringBuffer temp = new StringBuffer();
- temp.append(attrs.item(i).getNodeValue().substring(0, 15)
- + " ... "
- + attrs.item(i).getNodeValue().substring(
- valueLength - 15, valueLength));
- buffer.append("\n" + attrs.item(i).getNodeName() + ": " + temp);
- } else
- buffer.append("\n" + attrs.item(i).getNodeName() + ": "
- + attrs.item(i).getNodeValue());
-
- }
-
- return buffer.toString();
- }
-
- Rectangle getNodeBounds(nsIDOMNode visualNode) {
-
- return XulRunnerVpeUtils.getElementBounds(visualNode);
- }
-
- static boolean canInsertAfter(int x, int y, Rectangle rect) {
- if (y > (rect.y + rect.height) || x > (rect.x + rect.width)) {
- return true;
- }
- return y >= rect.x && x > (rect.x + rect.width / 2);
- }
-
- static nsIDOMNode getLastAppreciableVisualChild(nsIDOMNode visualParent) {
- nsIDOMNode visualLastChild = null;
- nsIDOMNodeList visualChildren = visualParent.getChildNodes();
- long len = visualChildren.getLength();
- for (long i = len - 1; i >= 0; i--) {
- nsIDOMNode visualChild = visualChildren.item(i);
- if (!isPseudoElement(visualChild) && !isAnonElement(visualChild)) {
- visualLastChild = visualChild;
- break;
- }
- }
- return visualLastChild;
- }
-
- void correctVisualDropPosition(VpeVisualInnerDropInfo newVisualDropInfo,
- VpeVisualInnerDropInfo oldVisualDropInfo) {
- nsIDOMNode newVisualDropContainer = newVisualDropInfo
- .getDropContainer();
- nsIDOMNode oldVisualDropContainer = oldVisualDropInfo
- .getDropContainer();
-
- if (newVisualDropContainer.equals(oldVisualDropContainer)) {
- newVisualDropInfo.setDropOffset(oldVisualDropInfo.getDropOffset());
- return;
- }
-
- nsIDOMNode child = oldVisualDropContainer;
- while (child != null && child.getNodeType() != Node.DOCUMENT_NODE) {
- nsIDOMNode parent = child.getParentNode();
- if (newVisualDropContainer.equals(parent)) {
- long offset = VisualDomUtil.getOffset(child);
- Rectangle rect = getNodeBounds(child);
- if (canInsertAfter(oldVisualDropInfo.getMouseX(),
- oldVisualDropInfo.getMouseY(), rect)) {
- offset++;
- }
- newVisualDropInfo.setDropOffset(offset);
- }
- child = parent;
- }
- }
-
- public nsIDOMRange createDOMRange() {
- return xulRunnerEditor.createDOMRange();
- }
-
- public nsIDOMRange createDOMRange(nsIDOMNode selectedNode) {
- nsIDOMRange range = createDOMRange();
- range.selectNode(selectedNode);
- return range;
- }
-
- public static boolean isIncludeElement(nsIDOMElement visualElement) {
- return YES_STRING.equalsIgnoreCase(visualElement
- .getAttribute(INCLUDE_ELEMENT_ATTR));
- }
-
- public static void markIncludeElement(nsIDOMElement visualElement) {
- visualElement.setAttribute(INCLUDE_ELEMENT_ATTR, YES_STRING);
- }
-
- protected void setReadOnlyElement(nsIDOMElement node) {
- String style = node.getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
- style = VpeStyleUtil.setParameterInStyle(style, "-moz-user-modify",
- "read-only");
- node.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
- }
-
- void setMoveCursor(nsIDOMMouseEvent mouseEvent) {
-
- nsIDOMElement selectedElement = xulRunnerEditor
- .getLastSelectedElement();
- if (selectedElement != null && canInnerDrag(selectedElement)) {
- String styleClasses = selectedElement.getAttribute(HTML.ATTR_CLASS);
- if (inDragArea(getNodeBounds(selectedElement), VisualDomUtil
- .getMousePoint(mouseEvent))) {
- // change cursor
- if (styleClasses == null
- || !(styleClasses.contains(ATTR_DRAG_AVAILABLE_CLASS))) {
- // change cursor style to move
- styleClasses = ATTR_DRAG_AVAILABLE_CLASS + " "
- + styleClasses;
- }
- } else {
- // change cursor style to normal
- if (styleClasses != null) {
-
- styleClasses = styleClasses.replaceAll(
- ATTR_DRAG_AVAILABLE_CLASS, "");
- }
- }
- selectedElement.setAttribute(HTML.ATTR_CLASS, styleClasses);
- }
- }
-
- private boolean inDragArea(Rectangle dragArea, Point mousePoint) {
- // TODO add drag and drop support
- return dragArea.contains(mousePoint)
- && mousePoint.x < (dragArea.x + DRAG_AREA_WIDTH)
- && mousePoint.y < (dragArea.y + DRAG_AREA_HEIGHT);
- }
-
- nsIDOMElement getDragElement(nsIDOMMouseEvent mouseEvent) {
-
- nsIDOMElement selectedElement = xulRunnerEditor
- .getLastSelectedElement();
- if (selectedElement != null && canInnerDrag(selectedElement)) {
- if (inDragArea(getNodeBounds(selectedElement), VisualDomUtil
- .getMousePoint(mouseEvent))) {
- return selectedElement;
- }
- }
- return null;
- }
-
- VpeSourceInnerDragInfo getSourceInnerDragInfo(
- VpeVisualInnerDragInfo visualDragInfo) {
- nsIDOMNode visualNode = visualDragInfo.getNode();
- int offset = visualDragInfo.getOffset();
- int length = visualDragInfo.getLength();
-
- VpeNodeMapping nodeMapping = domMapping.getNearNodeMapping(visualNode);
- Node sourceNode = nodeMapping.getSourceNode();
-
- if (sourceNode != null) {
- switch (sourceNode.getNodeType()) {
- case Node.TEXT_NODE:
- int end = TextUtil.sourceInnerPosition(visualNode
- .getNodeValue(), offset + length);
- offset = TextUtil.sourceInnerPosition(
- visualNode.getNodeValue(), offset);
- length = end - offset;
- break;
- case Node.ELEMENT_NODE:
- if (visualNode.getNodeType() == Node.TEXT_NODE) {
- // it's attribute
- sourceNode = null;
- if (isTextEditable(visualNode)) {
- String[] atributeNames = ((VpeElementMapping) nodeMapping)
- .getTemplate().getOutputAtributeNames();
- if (atributeNames != null && atributeNames.length > 0) {
- Element sourceElement = (Element) nodeMapping
- .getSourceNode();
- sourceNode = sourceElement
- .getAttributeNode(atributeNames[0]);
- end = TextUtil.sourceInnerPosition(visualNode
- .getNodeValue(), offset + length);
- offset = TextUtil.sourceInnerPosition(visualNode
- .getNodeValue(), offset);
- length = end - offset;
- }
- }
- }
- break;
- }
- }
- return new VpeSourceInnerDragInfo(sourceNode, offset, length);
- }
-
- public nsIDOMText getOutputTextNode(Attr attr) {
- Element sourceElement = ((Attr) attr).getOwnerElement();
- VpeElementMapping elementMapping = domMapping
- .getNearElementMapping(sourceElement);
- if (elementMapping != null) {
- return elementMapping.getTemplate().getOutputTextNode(pageContext,
- sourceElement, elementMapping.getData());
- }
- return null;
- }
-
- nsIDOMElement getLastSelectedElement() {
-
- return xulRunnerEditor.getLastSelectedElement();
- }
-
- public void pushIncludeStack(VpeIncludeInfo includeInfo) {
- includeStack.add(includeInfo);
- }
-
- public VpeIncludeInfo popIncludeStack() {
- VpeIncludeInfo includeInfo = null;
- if (includeStack.size() > 0) {
- includeInfo = (VpeIncludeInfo) includeStack.remove(includeStack
- .size() - 1);
- }
- return includeInfo;
- }
-
- public boolean isFileInIncludeStack(IFile file) {
- if (file == null)
- return false;
- for (int i = 0; i < includeStack.size(); i++) {
- if (file.equals(((VpeIncludeInfo) includeStack.get(i)).getFile())) {
- return true;
- }
- }
- return false;
- }
-
- protected boolean isCurrentMainDocument() {
- return includeStack.size() <= 1;
- }
-
- public int getCurrentMainIncludeOffset() {
- if (includeStack.size() <= 1)
- return -1;
- VpeIncludeInfo info = (VpeIncludeInfo) includeStack.get(1);
- return ((IndexedRegion) info.getElement()).getStartOffset();
- }
-
- public VpeIncludeInfo getCurrentIncludeInfo() {
- if (includeStack.size() <= 0)
- return null;
- return (VpeIncludeInfo) includeStack.get(includeStack.size() - 1);
- }
-
- public VpeIncludeInfo getRootIncludeInfo() {
- if (includeStack.size() <= 1)
- return null;
- return (VpeIncludeInfo) includeStack.get(1);
- }
-
+
+ public void setAttribute(Element sourceElement, String name, String value) {
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(sourceElement);
+ if (elementMapping != null) {
+ if (elementMapping.isIfDependencyFromAttribute(name)) {
+ updateElement(sourceElement);
+ } else {
+ VpeTemplate template = elementMapping.getTemplate();
+ if (elementMapping.getBorder() != null) {
+ updateElement(sourceElement);
+ } else if (template.isRecreateAtAttrChange(pageContext,
+ sourceElement, visualDocument,
+ (nsIDOMElement) elementMapping.getVisualNode(),
+ elementMapping.getData(), name, value)) {
+ updateElement(sourceElement);
+ } else {
+ nsIDOMElement visualElement = (nsIDOMElement) elementMapping
+ .getVisualNode();
+ if (visualElement != null) {
+ String visualElementName = visualElement.getNodeName();
+ if (HTML.TAG_SELECT.equalsIgnoreCase(visualElementName)) {
+ updateElement(sourceElement);
+ return;
+ } else if (HTML.TAG_OPTION
+ .equalsIgnoreCase(visualElementName)) {
+ updateElement(sourceElement.getParentNode());
+ return;
+ } else if (HTML.TAG_INPUT
+ .equalsIgnoreCase(visualElementName)) {
+ updateElement(sourceElement);
+ }
+ }
+// setXmlnsAttribute(elementMapping, name, value);
+ template.setAttribute(pageContext, sourceElement,
+ visualDocument, visualElement, elementMapping
+ .getData(), name, value);
+ resetTooltip(sourceElement, visualElement);
+ }
+ }
+ }
+ }
+
+ public void stopToggle(Node sourceNode) {
+ if (!(sourceNode instanceof Element))
+ return;
+
+ Element sourceElement = (Element) sourceNode;
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(sourceElement);
+ if (elementMapping != null) {
+ VpeTemplate template = elementMapping.getTemplate();
+
+ if (template instanceof VpeToggableTemplate) {
+ ((VpeToggableTemplate) template).stopToggling(sourceElement);
+ }
+ }
+ }
+
+ public boolean doToggle(nsIDOMNode visualNode) {
+ if (visualNode == null)
+ return false;
+ nsIDOMElement visualElement = null;
+ try {
+
+ visualElement = (nsIDOMElement) visualNode
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
+ } catch (XPCOMException exception) {
+ visualElement = (nsIDOMElement) visualNode.getParentNode()
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
+ }
+ if (visualElement == null)
+ return false;
+
+ nsIDOMAttr toggleIdAttr = visualElement
+ .getAttributeNode("vpe-user-toggle-id");
+ if (toggleIdAttr == null)
+ return false;
+ String toggleId = toggleIdAttr.getNodeValue();
+
+ if (toggleId == null)
+ return false;
+
+ boolean toggleLookup = false;
+ nsIDOMAttr toggleLookupAttr = visualElement
+ .getAttributeNode("vpe-user-toggle-lookup-parent");
+ if (toggleLookupAttr != null) {
+ toggleLookup = "true".equals(toggleLookupAttr.getNodeValue());
+ }
+
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(getLastSelectedElement());
+ Node sourceNode = (Node) domMapping
+ .getSourceNode(getLastSelectedElement());
+ if (sourceNode == null)
+ return false;
+
+ Element sourceElement = (Element) (sourceNode instanceof Element ? sourceNode
+ : sourceNode.getParentNode());
+
+ if (elementMapping != null) {
+ VpeTemplate template = elementMapping.getTemplate();
+
+ while (toggleLookup && sourceElement != null
+ && !(template instanceof VpeToggableTemplate)) {
+ sourceElement = (Element) sourceElement.getParentNode();
+ if (sourceElement == null)
+ break;
+ elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(sourceElement);
+ if (elementMapping == null)
+ continue;
+ template = elementMapping.getTemplate();
+ }
+
+ if (template instanceof VpeToggableTemplate) {
+ ((VpeToggableTemplate) template).toggle(this, sourceElement,
+ toggleId);
+ updateElement(sourceElement);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void removeAttribute(Element sourceElement, String name) {
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(sourceElement);
+ if (elementMapping != null) {
+ if (elementMapping.isIfDependencyFromAttribute(name)) {
+ updateElement(sourceElement);
+ } else {
+ VpeTemplate template = elementMapping.getTemplate();
+ if (template.isRecreateAtAttrChange(pageContext, sourceElement,
+ visualDocument, (nsIDOMElement) elementMapping
+ .getVisualNode(), elementMapping.getData(),
+ name, null)) {
+ updateElement(sourceElement);
+ }
+// else {
+// removeXmlnsAttribute(elementMapping, name);
+// template.removeAttribute(pageContext, sourceElement,
+// visualDocument, (nsIDOMElement) elementMapping
+// .getVisualNode(), elementMapping.getData(),
+// name);
+// resetTooltip(sourceElement, (nsIDOMElement) elementMapping
+// .getVisualNode());
+// }
+ }
+ }
+ }
+
+ public void refreshBundleValues(Element sourceElement) {
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(sourceElement);
+ if (elementMapping != null) {
+ VpeTemplate template = elementMapping.getTemplate();
+ template.refreshBundleValues(pageContext, sourceElement,
+ elementMapping.getData());
+ }
+ }
+
+ boolean isContentArea(nsIDOMNode visualNode) {
+ return visualContentArea.equals(visualNode);
+ }
+
+ nsIDOMElement getContentArea() {
+ return visualContentArea;
+ }
+
+ void setSelectionRectangle(nsIDOMElement visualElement) {
+ setSelectionRectangle(visualElement, true);
+ }
+
+ void setSelectionRectangle(nsIDOMElement visualElement, boolean scroll) {
+ int resizerConstrains = getResizerConstrains(visualElement);
+ visualEditor.setSelectionRectangle(visualElement, resizerConstrains,
+ scroll);
+ }
+
+ public nsIDOMNode addLinkNodeToHead(String href_val, String ext_val) {
+ nsIDOMElement newNode = createLinkNode(href_val,
+ ATTR_REL_STYLESHEET_VALUE, ext_val);
+ headNode.appendChild(newNode);
+ return newNode;
+ }
+
+ public nsIDOMNode replaceLinkNodeToHead(nsIDOMNode oldNode,
+ String href_val, String ext_val) {
+ nsIDOMNode newNode = createLinkNode(href_val,
+ ATTR_REL_STYLESHEET_VALUE, ext_val);
+ headNode.replaceChild(newNode, oldNode);
+ return newNode;
+ }
+
+ public nsIDOMNode replaceLinkNodeToHead(String href_val, String ext_val) {
+ nsIDOMNode newNode = null;
+ nsIDOMNode oldNode = getLinkNode(href_val, ext_val);
+ if (oldNode == null) {
+ newNode = addLinkNodeToHead(href_val, ext_val);
+ }
+ return newNode;
+ }
+
+ public void removeLinkNodeFromHead(nsIDOMNode node) {
+ headNode.removeChild(node);
+ }
+
+ private nsIDOMElement createLinkNode(String href_val, String rel_val,
+ String ext_val) {
+ nsIDOMElement linkNode = null;
+ if ((ATTR_REL_STYLESHEET_VALUE.equalsIgnoreCase(rel_val))
+ && href_val.startsWith("file:")) {
+ /*
+ * Because of the Mozilla caches the linked css files we replace tag
+ * <link rel="styleseet" href="file://..."> with tag <style
+ * vpe="ATTR_VPE_INLINE_LINK_VALUE">file content</style> It is
+ * LinkReplacer
+ */
+ linkNode = visualDocument.createElement(HTML.TAG_STYLE);
+ linkNode.setAttribute(ATTR_VPE, ATTR_VPE_INLINE_LINK_VALUE);
+
+ /* Copy links attributes into our <style> */
+ linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_HREF, href_val);
+ linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_EXT, ext_val);
+ try {
+ StringBuffer styleText = new StringBuffer(EMPTY_STRING);
+ URL url = new URL((new Path(href_val)).toOSString());
+ String fileName = url.getFile();
+ BufferedReader in = new BufferedReader(new FileReader(
+ (fileName)));
+ String str = EMPTY_STRING;
+ while ((str = in.readLine()) != null) {
+ styleText.append(str);
+ }
+
+ String styleForParse = styleText.toString();
+ styleForParse = VpeStyleUtil.addFullPathIntoURLValue(
+ styleForParse, href_val);
+
+ in.close();
+ nsIDOMText textNode = visualDocument
+ .createTextNode(styleForParse);
+ linkNode.appendChild(textNode);
+ return linkNode;
+ } catch (FileNotFoundException fnfe) {
+ /* File which was pointed by user is not exists. Do nothing. */
+ } catch (IOException ioe) {
+ VpePlugin.getPluginLog().logError(ioe.getMessage(), ioe);
+ }
+ }
+
+ linkNode = visualDocument.createElement(HTML.TAG_LINK);
+ linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_REL, rel_val);
+ linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_HREF, href_val);
+ linkNode.setAttribute(VpeTemplateManager.ATTR_LINK_EXT, ext_val);
+
+ return linkNode;
+ }
+
+ private boolean isLinkReplacer(nsIDOMNode node) {
+ return HTML.TAG_STYLE.equalsIgnoreCase(node.getNodeName())
+ && ATTR_VPE_INLINE_LINK_VALUE
+ .equalsIgnoreCase(((nsIDOMElement) node
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
+ .getAttribute(ATTR_VPE));
+ }
+
+ private nsIDOMNode getLinkNode(String href_val, String ext_val) {
+ nsIDOMNodeList children = headNode.getChildNodes();
+ long len = children.getLength();
+ for (long i = len - 1; i >= 0; i--) {
+ nsIDOMNode node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ if (HTML.TAG_LINK.equalsIgnoreCase(node.getNodeName())
+ || isLinkReplacer(node)) {
+ nsIDOMElement element = (nsIDOMElement) node
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
+ if (ext_val.equalsIgnoreCase(element
+ .getAttribute(VpeTemplateManager.ATTR_LINK_EXT))
+ && href_val
+ .equalsIgnoreCase(element
+ .getAttribute(VpeTemplateManager.ATTR_LINK_HREF))) {
+ return node;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ private void cleanHead() {
+ nsIDOMNodeList children = headNode.getChildNodes();
+ long len = children.getLength();
+ for (long i = len - 1; i >= 0; i--) {
+ nsIDOMNode node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ String name = node.getNodeName();
+ if (HTML.TAG_LINK.equalsIgnoreCase(name)
+ || isLinkReplacer(node)) {
+ if (NO_STRING.equalsIgnoreCase(((nsIDOMElement) node
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
+ .getAttribute("ext"))) {
+ // int linkAddress =
+ // MozillaSupports.queryInterface(node,
+ // nsIStyleSheetLinkingElement.NS_ISTYLESHEETLINKINGELEMENT_IID);
+ // nsIStyleSheetLinkingElement linkingElement = new
+ // nsIStyleSheetLinkingElement(linkAddress);
+ // linkingElement.removeStyleSheet();
+ node = headNode.removeChild(node);
+ }
+ } else if (HTML.TAG_STYLE.equalsIgnoreCase(node.getNodeName())
+ && (!YES_STRING
+ .equalsIgnoreCase(((nsIDOMElement) node
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
+ .getAttribute(ATTR_VPE)))) {
+ node = headNode.removeChild(node);
+ }
+ }
+ }
+ }
+
+ private class PseudoInfo {
+ private nsIDOMNode pseudoNode;
+ private boolean isElements;
+
+ private PseudoInfo() {
+ this(null, false);
+ }
+
+ private PseudoInfo(nsIDOMNode pseudoNode, boolean isElements) {
+ this.pseudoNode = pseudoNode;
+ this.isElements = isElements;
+ }
+ }
+
+ void showDragCaret(nsIDOMNode node, int offset) {
+ xulRunnerEditor.showDragCaret(node, offset);
+ }
+
+ void hideDragCaret() {
+
+ xulRunnerEditor.hideDragCaret();
+ }
+
+ private int getResizerConstrains(nsIDOMNode visualNode) {
+ VpeNodeMapping nodeMapping = domMapping.getNodeMapping(visualNode);
+ if (nodeMapping != null
+ && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
+ return ((VpeElementMapping) nodeMapping).getTemplate()
+ .getTagDescription(pageContext,
+ (Element) nodeMapping.getSourceNode(),
+ visualDocument,
+ (nsIDOMElement) nodeMapping.getVisualNode(),
+ ((VpeElementMapping) nodeMapping).getData())
+ .getResizeConstrains();
+ }
+ return VpeTagDescription.RESIZE_CONSTRAINS_NONE;
+ }
+
+ public void resize(nsIDOMElement element, int resizerConstrains, int top,
+ int left, int width, int height) {
+ VpeElementMapping elementMapping = (VpeElementMapping) domMapping
+ .getNodeMapping(element);
+ if (elementMapping != null) {
+ elementMapping.getTemplate().resize(pageContext,
+ (Element) elementMapping.getSourceNode(), visualDocument,
+ element, elementMapping.getData(), resizerConstrains, top,
+ left, width, height);
+ }
+ }
+
+ static boolean isAnonElement(nsIDOMNode visualNode) {
+ if (visualNode != null
+ && visualNode.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
+ String attrValue = ((nsIDOMElement) visualNode
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID))
+ .getAttribute(MOZ_ANONCLASS_ATTR);
+
+ return attrValue != null && attrValue.length() > 0;
+ }
+
+ return false;
+ }
+
+ boolean canInnerDrag(nsIDOMElement visualDragElement) {
+ VpeNodeMapping node = domMapping.getNodeMapping(visualDragElement);
+ if (node instanceof VpeElementMapping) {
+ VpeElementMapping elementMapping = (VpeElementMapping) node;
+ if (elementMapping != null) {
+ return elementMapping.getTemplate().canInnerDrag(pageContext,
+ (Element) elementMapping.getSourceNode(),
+ visualDocument, visualDragElement,
+ elementMapping.getData());
+ }
+ }
+ return false;
+ }
+
+ VpeSourceInnerDropInfo getSourceInnerDropInfo(Node sourceDragNode,
+ VpeVisualInnerDropInfo visualDropInfo, boolean checkParentTemplates) {
+ nsIDOMNode visualDropContainer = visualDropInfo.getDropContainer();
+ long visualDropOffset = visualDropInfo.getDropOffset();
+ Node sourceDropContainer = null;
+ int sourceDropOffset = 0;
+
+ switch (visualDropContainer.getNodeType()) {
+ case nsIDOMNode.ELEMENT_NODE:
+ nsIDOMNode visualOffsetNode = null;
+ boolean afterFlag = false;
+ long visualChildCount = VisualDomUtil
+ .getChildCount(visualDropContainer);
+ if (visualDropOffset < visualChildCount) {
+ visualOffsetNode = VisualDomUtil.getChildNode(
+ visualDropContainer, visualDropOffset);
+ if (isPseudoElement(visualOffsetNode)
+ || isAnonElement(visualOffsetNode)) {
+ visualOffsetNode = getLastAppreciableVisualChild(visualDropContainer);
+ afterFlag = true;
+ }
+ } else {
+ visualOffsetNode = getLastAppreciableVisualChild(visualDropContainer);
+ afterFlag = visualChildCount != 0;
+ }
+ if (visualOffsetNode != null) {
+ Node sourceOffsetNode = domMapping
+ .getSourceNode(visualOffsetNode);
+ if (sourceOffsetNode != null) {
+ sourceDropContainer = sourceOffsetNode.getParentNode();
+ sourceDropOffset = ((NodeImpl) sourceOffsetNode).getIndex();
+ if (afterFlag) {
+ sourceDropOffset++;
+ }
+ }
+ }
+ if (sourceDropContainer == null) {
+ sourceDropContainer = domMapping
+ .getNearSourceNode(visualDropContainer);
+ if (sourceDropContainer != null) {
+ sourceDropOffset = sourceDropContainer.getChildNodes()
+ .getLength();
+ }
+ }
+ if (sourceDropContainer == null) {
+ sourceDropContainer = domMapping
+ .getNearSourceNode(visualContentArea);
+ sourceDropOffset = sourceDropContainer.getChildNodes()
+ .getLength();
+ }
+ break;
+ case nsIDOMNode.TEXT_NODE:
+ VpeNodeMapping nodeMapping = domMapping
+ .getNearNodeMapping(visualDropContainer);
+ switch (nodeMapping.getType()) {
+ case VpeNodeMapping.TEXT_MAPPING:
+ sourceDropContainer = nodeMapping.getSourceNode();
+ sourceDropOffset = TextUtil.sourceInnerPosition(
+ sourceDropContainer.getNodeValue(), visualDropOffset);
+ break;
+ case VpeNodeMapping.ELEMENT_MAPPING:
+ // it's attribute
+ if (isTextEditable(visualDropContainer)) {
+ String[] atributeNames = ((VpeElementMapping) nodeMapping)
+ .getTemplate().getOutputAtributeNames();
+ if (atributeNames != null && atributeNames.length > 0) {
+ Element sourceElement = (Element) nodeMapping
+ .getSourceNode();
+ sourceDropContainer = sourceElement
+ .getAttributeNode(atributeNames[0]);
+ sourceDropOffset = TextUtil.sourceInnerPosition(
+ sourceDropContainer.getNodeValue(),
+ visualDropOffset);
+ }
+ }
+ nodeMapping.getVisualNode();
+ }
+ break;
+ }
+ if (sourceDropContainer != null) {
+ return getSourceInnerDropInfo(sourceDragNode, sourceDropContainer,
+ sourceDropOffset, checkParentTemplates);
+ } else {
+ return new VpeSourceInnerDropInfo(null, 0, false);
+ }
+ }
+
+ VpeSourceInnerDropInfo getSourceInnerDropInfo(Node dragNode,
+ Node container, int offset, boolean checkParentsTemplates) {
+ // Thread.dumpStack();
+ boolean canDrop = false;
+ switch (container.getNodeType()) {
+ case Node.ELEMENT_NODE:
+ VpeNodeMapping nodeMapping = domMapping.getNodeMapping(container);
+ if (nodeMapping != null
+ && nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
+ canDrop = ((VpeElementMapping) nodeMapping).getTemplate()
+ .canInnerDrop(pageContext, container, dragNode);
+ }
+ if (!canDrop) {
+ if (!checkParentsTemplates)
+ return new VpeSourceInnerDropInfo(container, offset,
+ canDrop);
+ // offset = ((NodeImpl)container).getIndex();
+ // container = container.getParentNode();
+ // TODO Max Areshkau unclear logic , if we can drop on element
+ // why we trying to drop
+ // this on parent
+ // return getSourceInnerDropInfo(dragNode, container, offset,
+ // false);
+ return new VpeSourceInnerDropInfo(container, offset, canDrop);
+ }
+ break;
+ case Node.TEXT_NODE:
+ case Node.DOCUMENT_NODE:
+ canDrop = true;
+ break;
+ case Node.ATTRIBUTE_NODE:
+ canDrop = true;
+ break;
+ }
+ if (canDrop) {
+ return new VpeSourceInnerDropInfo(container, offset, canDrop);
+ } else {
+ return new VpeSourceInnerDropInfo(null, 0, canDrop);
+ }
+ }
+
+ public void innerDrop(Node dragNode, Node container, int offset) {
+ VpeNodeMapping mapping = domMapping.getNearNodeMapping(container);
+ if (mapping != null) {
+ nsIDOMNode visualDropContainer = mapping.getVisualNode();
+ switch (mapping.getType()) {
+ case VpeNodeMapping.TEXT_MAPPING:
+ break;
+ case VpeNodeMapping.ELEMENT_MAPPING:
+ nsIDOMNode visualParent = visualDropContainer.getParentNode();
+ VpeNodeMapping oldMapping = mapping;
+ mapping = domMapping.getNearNodeMapping(visualParent);
+ if (mapping != null
+ && mapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
+ ((VpeElementMapping) mapping).getTemplate()
+ .innerDrop(
+ pageContext,
+ new VpeSourceInnerDragInfo(dragNode, 0, 0),
+ new VpeSourceInnerDropInfo(container,
+ offset, true));
+ } else {
+ ((VpeElementMapping) oldMapping).getTemplate()
+ .innerDrop(
+ pageContext,
+ new VpeSourceInnerDragInfo(dragNode, 0, 0),
+ new VpeSourceInnerDropInfo(container,
+ offset, true));
+ }
+ }
+
+ }
+ }
+
+ void innerDrop(VpeSourceInnerDragInfo dragInfo,
+ VpeSourceInnerDropInfo dropInfo) {
+ dropper.drop(pageContext, dragInfo, dropInfo);
+ }
+
+ nsIDOMElement getNearDragElement(Element visualElement) {
+ VpeElementMapping elementMapping = domMapping
+ .getNearElementMapping(visualElement);
+ while (elementMapping != null) {
+ if (canInnerDrag(elementMapping.getVisualElement())) {
+ return elementMapping.getVisualElement();
+ }
+ elementMapping = domMapping.getNearElementMapping(elementMapping
+ .getVisualNode().getParentNode());
+ }
+ return null;
+ }
+
+ nsIDOMElement getDragElement(nsIDOMElement visualElement) {
+ VpeElementMapping elementMapping = domMapping
+ .getNearElementMapping(visualElement);
+ if (elementMapping != null
+ && canInnerDrag(elementMapping.getVisualElement())) {
+ return elementMapping.getVisualElement();
+ }
+ return null;
+ }
+
+ public boolean isTextEditable(nsIDOMNode visualNode) {
+ if (visualNode != null) {
+ nsIDOMNode parent = visualNode.getParentNode();
+ if (parent != null
+ && parent.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
+ nsIDOMElement element = (nsIDOMElement) parent
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
+ nsIDOMAttr style = element.getAttributeNode("style");
+ if (style != null) {
+ String styleValue = style.getNodeValue();
+ String[] items = styleValue.split(";");
+ for (int i = 0; i < items.length; i++) {
+ String[] item = items[i].split(":");
+ if ("-moz-user-modify".equals(item[0].trim())
+ && "read-only".equals(item[1].trim())) {
+ return false;
+ }
+ }
+ }
+ nsIDOMAttr classAttr = element.getAttributeNode("class");
+ if (classAttr != null) {
+ String classValue = classAttr.getNodeValue().trim();
+ if ("__any__tag__caption".equals(classValue)) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ VpeVisualInnerDropInfo getInnerDropInfo(Node sourceDropContainer,
+ int sourceDropOffset) {
+ nsIDOMNode visualDropContainer = null;
+ long visualDropOffset = 0;
+
+ switch (sourceDropContainer.getNodeType()) {
+ case Node.TEXT_NODE:
+ visualDropContainer = domMapping.getVisualNode(sourceDropContainer);
+ visualDropOffset = TextUtil.visualInnerPosition(sourceDropContainer
+ .getNodeValue(), sourceDropOffset);
+ break;
+ case Node.ELEMENT_NODE:
+ case Node.DOCUMENT_NODE:
+ NodeList sourceChildren = sourceDropContainer.getChildNodes();
+ if (sourceDropOffset < sourceChildren.getLength()) {
+ Node sourceChild = sourceChildren.item(sourceDropOffset);
+ nsIDOMNode visualChild = domMapping.getVisualNode(sourceChild);
+ if (visualChild != null) {
+ visualDropContainer = visualChild.getParentNode();
+
+ visualDropOffset = VisualDomUtil.getOffset(visualChild);
+ }
+ }
+ if (visualDropContainer == null) {
+ visualDropContainer = domMapping
+ .getNearVisualNode(sourceDropContainer);
+ nsIDOMNode visualChild = getLastAppreciableVisualChild(visualDropContainer);
+ if (visualChild != null) {
+ visualDropOffset = VisualDomUtil.getOffset(visualChild) + 1;
+ } else {
+ visualDropOffset = 0;
+ }
+ }
+ break;
+ case Node.ATTRIBUTE_NODE:
+ Element sourceElement = ((Attr) sourceDropContainer)
+ .getOwnerElement();
+ VpeElementMapping elementMapping = domMapping
+ .getNearElementMapping(sourceElement);
+ nsIDOMNode textNode = elementMapping.getTemplate()
+ .getOutputTextNode(pageContext, sourceElement,
+ elementMapping.getData());
+ if (textNode != null) {
+ visualDropContainer = textNode;
+ visualDropOffset = TextUtil.visualInnerPosition(
+ sourceDropContainer.getNodeValue(), sourceDropOffset);
+ }
+ break;
+ }
+ if (visualDropContainer == null) {
+ return null;
+ }
+ return new VpeVisualInnerDropInfo(visualDropContainer,
+ visualDropOffset, 0, 0);
+ }
+
+ protected void setTooltip(Element sourceElement, nsIDOMElement visualElement) {
+ if (visualElement != null && sourceElement != null
+ && !((ElementImpl) sourceElement).isJSPTag()) {
+ if (HTML.TAG_HTML.equalsIgnoreCase(sourceElement.getNodeName()))
+ return;
+ String titleValue = getTooltip(sourceElement);
+
+ if (titleValue != null) {
+ titleValue = titleValue.replaceAll("&", "&");
+ titleValue = titleValue.replaceAll("<", "<");
+ titleValue = titleValue.replaceAll(">", ">");
+ }
+
+ if (titleValue != null) {
+ // visualElement.setAttribute("title", titleValue);
+ setTooltip(visualElement, titleValue);
+ }
+ }
+ }
+
+ protected void setTooltip(nsIDOMElement visualElement, String titleValue) {
+ visualElement.setAttribute("title", titleValue);
+ nsIDOMNodeList children = visualElement.getChildNodes();
+ long len = children.getLength();
+ for (long i = 0; i < len; i++) {
+ nsIDOMNode child = children.item(i);
+ if (child.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
+ setTooltip(((nsIDOMElement) child
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID)),
+ titleValue);
+ }
+ }
+ }
+
+ private void resetTooltip(Element sourceElement, nsIDOMElement visualElement) {
+ if (visualElement != null && sourceElement != null
+ && !((ElementImpl) sourceElement).isJSPTag()) {
+ if (HTML.TAG_HTML.equalsIgnoreCase(sourceElement.getNodeName()))
+ return;
+ String titleValue = getTooltip(sourceElement);
+
+ if (titleValue != null) {
+ titleValue = titleValue.replaceAll("&", "&");
+ titleValue = titleValue.replaceAll("<", "<");
+ titleValue = titleValue.replaceAll(">", ">");
+ }
+
+ if (titleValue != null) {
+ resetTooltip(visualElement, titleValue);
+ }
+ }
+ }
+
+ private void resetTooltip(nsIDOMElement visualElement, String titleValue) {
+ visualElement.setAttribute("title", titleValue);
+ nsIDOMNodeList children = visualElement.getChildNodes();
+ long len = children.getLength();
+ for (long i = 0; i < len; i++) {
+ nsIDOMNode child = children.item(i);
+ if (child.getNodeType() == nsIDOMNode.ELEMENT_NODE) {
+ if (domMapping.getNodeMapping(child) == null) {
+ resetTooltip((nsIDOMElement) child
+ .queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID),
+ titleValue);
+ }
+ }
+ }
+ }
+
+ private String getTooltip(Element sourceElement) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(sourceElement.getNodeName());
+ NamedNodeMap attrs = sourceElement.getAttributes();
+ int len = attrs.getLength();
+ for (int i = 0; i < len; i++) {
+ if (i == 7) {
+ return buffer.append("\n\t... ").toString();
+ }
+ int valueLength = attrs.item(i).getNodeValue().length();
+ if (valueLength > 30) {
+ StringBuffer temp = new StringBuffer();
+ temp.append(attrs.item(i).getNodeValue().substring(0, 15)
+ + " ... "
+ + attrs.item(i).getNodeValue().substring(
+ valueLength - 15, valueLength));
+ buffer.append("\n" + attrs.item(i).getNodeName() + ": " + temp);
+ } else
+ buffer.append("\n" + attrs.item(i).getNodeName() + ": "
+ + attrs.item(i).getNodeValue());
+
+ }
+
+ return buffer.toString();
+ }
+
+ Rectangle getNodeBounds(nsIDOMNode visualNode) {
+
+ return XulRunnerVpeUtils.getElementBounds(visualNode);
+ }
+
+ static boolean canInsertAfter(int x, int y, Rectangle rect) {
+ if (y > (rect.y + rect.height) || x > (rect.x + rect.width)) {
+ return true;
+ }
+ return y >= rect.x && x > (rect.x + rect.width / 2);
+ }
+
+ static nsIDOMNode getLastAppreciableVisualChild(nsIDOMNode visualParent) {
+ nsIDOMNode visualLastChild = null;
+ nsIDOMNodeList visualChildren = visualParent.getChildNodes();
+ long len = visualChildren.getLength();
+ for (long i = len - 1; i >= 0; i--) {
+ nsIDOMNode visualChild = visualChildren.item(i);
+ if (!isPseudoElement(visualChild) && !isAnonElement(visualChild)) {
+ visualLastChild = visualChild;
+ break;
+ }
+ }
+ return visualLastChild;
+ }
+
+ void correctVisualDropPosition(VpeVisualInnerDropInfo newVisualDropInfo,
+ VpeVisualInnerDropInfo oldVisualDropInfo) {
+ nsIDOMNode newVisualDropContainer = newVisualDropInfo
+ .getDropContainer();
+ nsIDOMNode oldVisualDropContainer = oldVisualDropInfo
+ .getDropContainer();
+
+ if (newVisualDropContainer.equals(oldVisualDropContainer)) {
+ newVisualDropInfo.setDropOffset(oldVisualDropInfo.getDropOffset());
+ return;
+ }
+
+ nsIDOMNode child = oldVisualDropContainer;
+ while (child != null && child.getNodeType() != Node.DOCUMENT_NODE) {
+ nsIDOMNode parent = child.getParentNode();
+ if (newVisualDropContainer.equals(parent)) {
+ long offset = VisualDomUtil.getOffset(child);
+ Rectangle rect = getNodeBounds(child);
+ if (canInsertAfter(oldVisualDropInfo.getMouseX(),
+ oldVisualDropInfo.getMouseY(), rect)) {
+ offset++;
+ }
+ newVisualDropInfo.setDropOffset(offset);
+ }
+ child = parent;
+ }
+ }
+
+ public nsIDOMRange createDOMRange() {
+ return xulRunnerEditor.createDOMRange();
+ }
+
+ public nsIDOMRange createDOMRange(nsIDOMNode selectedNode) {
+ nsIDOMRange range = createDOMRange();
+ range.selectNode(selectedNode);
+ return range;
+ }
+
+ public static boolean isIncludeElement(nsIDOMElement visualElement) {
+ return YES_STRING.equalsIgnoreCase(visualElement
+ .getAttribute(INCLUDE_ELEMENT_ATTR));
+ }
+
+ public static void markIncludeElement(nsIDOMElement visualElement) {
+ visualElement.setAttribute(INCLUDE_ELEMENT_ATTR, YES_STRING);
+ }
+
+ protected void setReadOnlyElement(nsIDOMElement node) {
+ String style = node.getAttribute(VpeStyleUtil.ATTRIBUTE_STYLE);
+ style = VpeStyleUtil.setParameterInStyle(style, "-moz-user-modify",
+ "read-only");
+ node.setAttribute(VpeStyleUtil.ATTRIBUTE_STYLE, style);
+ }
+
+ void setMoveCursor(nsIDOMMouseEvent mouseEvent) {
+
+ nsIDOMElement selectedElement = xulRunnerEditor
+ .getLastSelectedElement();
+ if (selectedElement != null && canInnerDrag(selectedElement)) {
+ String styleClasses = selectedElement.getAttribute(HTML.ATTR_CLASS);
+ if (inDragArea(getNodeBounds(selectedElement), VisualDomUtil
+ .getMousePoint(mouseEvent))) {
+ // change cursor
+ if (styleClasses == null
+ || !(styleClasses.contains(ATTR_DRAG_AVAILABLE_CLASS))) {
+ // change cursor style to move
+ styleClasses = ATTR_DRAG_AVAILABLE_CLASS + " "
+ + styleClasses;
+ }
+ } else {
+ // change cursor style to normal
+ if (styleClasses != null) {
+
+ styleClasses = styleClasses.replaceAll(
+ ATTR_DRAG_AVAILABLE_CLASS, "");
+ }
+ }
+ selectedElement.setAttribute(HTML.ATTR_CLASS, styleClasses);
+ }
+ }
+
+ private boolean inDragArea(Rectangle dragArea, Point mousePoint) {
+ // TODO add drag and drop support
+ return dragArea.contains(mousePoint)
+ && mousePoint.x < (dragArea.x + DRAG_AREA_WIDTH)
+ && mousePoint.y < (dragArea.y + DRAG_AREA_HEIGHT);
+ }
+
+ nsIDOMElement getDragElement(nsIDOMMouseEvent mouseEvent) {
+
+ nsIDOMElement selectedElement = xulRunnerEditor
+ .getLastSelectedElement();
+ if (selectedElement != null && canInnerDrag(selectedElement)) {
+ if (inDragArea(getNodeBounds(selectedElement), VisualDomUtil
+ .getMousePoint(mouseEvent))) {
+ return selectedElement;
+ }
+ }
+ return null;
+ }
+
+ VpeSourceInnerDragInfo getSourceInnerDragInfo(
+ VpeVisualInnerDragInfo visualDragInfo) {
+ nsIDOMNode visualNode = visualDragInfo.getNode();
+ int offset = visualDragInfo.getOffset();
+ int length = visualDragInfo.getLength();
+
+ VpeNodeMapping nodeMapping = domMapping.getNearNodeMapping(visualNode);
+ Node sourceNode = nodeMapping.getSourceNode();
+
+ if (sourceNode != null) {
+ switch (sourceNode.getNodeType()) {
+ case Node.TEXT_NODE:
+ int end = TextUtil.sourceInnerPosition(visualNode
+ .getNodeValue(), offset + length);
+ offset = TextUtil.sourceInnerPosition(
+ visualNode.getNodeValue(), offset);
+ length = end - offset;
+ break;
+ case Node.ELEMENT_NODE:
+ if (visualNode.getNodeType() == Node.TEXT_NODE) {
+ // it's attribute
+ sourceNode = null;
+ if (isTextEditable(visualNode)) {
+ String[] atributeNames = ((VpeElementMapping) nodeMapping)
+ .getTemplate().getOutputAtributeNames();
+ if (atributeNames != null && atributeNames.length > 0) {
+ Element sourceElement = (Element) nodeMapping
+ .getSourceNode();
+ sourceNode = sourceElement
+ .getAttributeNode(atributeNames[0]);
+ end = TextUtil.sourceInnerPosition(visualNode
+ .getNodeValue(), offset + length);
+ offset = TextUtil.sourceInnerPosition(visualNode
+ .getNodeValue(), offset);
+ length = end - offset;
+ }
+ }
+ }
+ break;
+ }
+ }
+ return new VpeSourceInnerDragInfo(sourceNode, offset, length);
+ }
+
+ public nsIDOMText getOutputTextNode(Attr attr) {
+ Element sourceElement = ((Attr) attr).getOwnerElement();
+ VpeElementMapping elementMapping = domMapping
+ .getNearElementMapping(sourceElement);
+ if (elementMapping != null) {
+ return elementMapping.getTemplate().getOutputTextNode(pageContext,
+ sourceElement, elementMapping.getData());
+ }
+ return null;
+ }
+
+ nsIDOMElement getLastSelectedElement() {
+
+ return xulRunnerEditor.getLastSelectedElement();
+ }
+
+ public void pushIncludeStack(VpeIncludeInfo includeInfo) {
+ includeStack.add(includeInfo);
+ }
+
+ public VpeIncludeInfo popIncludeStack() {
+ VpeIncludeInfo includeInfo = null;
+ if (includeStack.size() > 0) {
+ includeInfo = (VpeIncludeInfo) includeStack.remove(includeStack
+ .size() - 1);
+ }
+ return includeInfo;
+ }
+
+ public boolean isFileInIncludeStack(IFile file) {
+ if (file == null)
+ return false;
+ for (int i = 0; i < includeStack.size(); i++) {
+ if (file.equals(((VpeIncludeInfo) includeStack.get(i)).getFile())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected boolean isCurrentMainDocument() {
+ return includeStack.size() <= 1;
+ }
+
+ public int getCurrentMainIncludeOffset() {
+ if (includeStack.size() <= 1)
+ return -1;
+ VpeIncludeInfo info = (VpeIncludeInfo) includeStack.get(1);
+ return ((IndexedRegion) info.getElement()).getStartOffset();
+ }
+
+ public VpeIncludeInfo getCurrentIncludeInfo() {
+ if (includeStack.size() <= 0)
+ return null;
+ return (VpeIncludeInfo) includeStack.get(includeStack.size() - 1);
+ }
+
+ public VpeIncludeInfo getRootIncludeInfo() {
+ if (includeStack.size() <= 1)
+ return null;
+ return (VpeIncludeInfo) includeStack.get(1);
+ }
+
public void dispose() {
clearIncludeDocuments();
includeDocuments=null;
- cleanHead();
- domMapping.clear(visualContentArea);
- pageContext.dispose();
+ cleanHead();
+ domMapping.clear(visualContentArea);
+ pageContext.dispose();
super.dispose();
- }
-
- private void clearIncludeDocuments() {
- Collection<Document> documents = includeDocuments.values();
- for (Iterator iterator = documents.iterator(); iterator.hasNext();) {
- Document document = (Document) iterator.next();
- VpeCreatorUtil.releaseDocumentFromRead(document);
- }
- includeDocuments.clear();
- }
-
- protected Map createXmlns(Element sourceNode) {
- NamedNodeMap attrs = ((Element) sourceNode).getAttributes();
- if (attrs != null) {
- Map xmlnsMap = new HashMap();
- for (int i = 0; i < attrs.getLength(); i++) {
- addTaglib(sourceNode, xmlnsMap, attrs.item(i).getNodeName(),
- true);
- }
- if (xmlnsMap.size() > 0) {
- return xmlnsMap;
- }
- }
- return null;
- }
-
- private void setXmlnsAttribute(VpeElementMapping elementMapping,
- String name, String value) {
- Element sourceElement = (Element) elementMapping.getSourceNode();
- if (sourceElement != null) {
- Map xmlnsMap = elementMapping.getXmlnsMap();
- if (xmlnsMap == null)
- xmlnsMap = new HashMap();
- addTaglib(sourceElement, xmlnsMap, name, true);
- elementMapping.setXmlnsMap(xmlnsMap.size() > 0 ? xmlnsMap : null);
- }
- }
-
- private void removeXmlnsAttribute(VpeElementMapping elementMapping,
- String name) {
- Element sourceElement = (Element) elementMapping.getSourceNode();
- if (sourceElement != null) {
- Map xmlnsMap = elementMapping.getXmlnsMap();
- if (xmlnsMap != null) {
- Object id = xmlnsMap.remove(name);
- if (id != null) {
- pageContext.setTaglib(((Integer) id).intValue(), null,
- null, true);
- elementMapping.setXmlnsMap(xmlnsMap.size() > 0 ? xmlnsMap
- : null);
- }
- }
- }
- }
-
- private void addTaglib(Element sourceElement, Map xmlnsMap,
- String attrName, boolean ns) {
- Attr attr = sourceElement.getAttributeNode(attrName);
- if (ATTR_XMLNS.equals(attr.getPrefix())) {
- xmlnsMap.put(attr.getNodeName(), Integer.valueOf(attr.hashCode()));
- pageContext.setTaglib(attr.hashCode(), attr.getNodeValue(), attr
- .getLocalName(), ns);
- }
- }
-
- /**
- * @return the dnd
- */
- public VpeDnD getDnd() {
-
- return dnd;
- }
-
- /**
- * @param dnd
- * the dnd to set
- */
- public void setDnd(VpeDnD dnd) {
-
- this.dnd = dnd;
- }
-
- /**
- * @return the pageContext
- */
- protected VpePageContext getPageContext() {
- return pageContext;
- }
-
- /**
- * @param pageContext
- * the pageContext to set
- */
- protected void setPageContext(VpePageContext pageContext) {
- this.pageContext = pageContext;
- }
-
- /**
- * @return the visualDocument
- */
- protected nsIDOMDocument getVisualDocument() {
- return visualDocument;
- }
-
- /**
- * @param visualDocument
- * the visualDocument to set
- */
- protected void setVisualDocument(nsIDOMDocument visualDocument) {
- this.visualDocument = visualDocument;
- }
-
- /**
- * Check this file is facelet
- *
- * @return this if file is facelet, otherwize false
- */
- private boolean isFacelet() {
- boolean isFacelet = false;
-
- IEditorInput iEditorInput = pageContext.getEditPart().getEditorInput();
- if (iEditorInput instanceof IFileEditorInput) {
- IFileEditorInput iFileEditorInput = (IFileEditorInput) iEditorInput;
-
- IFile iFile = iFileEditorInput.getFile();
-
- IProject project = iFile.getProject();
- IModelNature nature = EclipseResourceUtil.getModelNature(project);
- if (nature != null) {
- XModel model = nature.getModel();
- XModelObject webXML = WebAppHelper.getWebApp(model);
- XModelObject param = WebAppHelper.findWebAppContextParam(
- webXML, "javax.faces.DEFAULT_SUFFIX");
- if (param != null) {
- String value = param.getAttributeValue("param-value");
-
- if (value.length() != 0 && iFile.getName().endsWith(value)) {
- isFacelet = true;
- }
- }
- }
- }
-
- return isFacelet;
- }
-
- /**
- * Create a visual element for text node
- *
- * @param sourceNode
- * @param registerFlag
- * @return a visual element for text node
- */
-
- protected nsIDOMNode createTextNode(Node sourceNode, boolean registerFlag) {
- String sourceText = sourceNode.getNodeValue();
+ }
+
+ private void clearIncludeDocuments() {
+ Collection<Document> documents = includeDocuments.values();
+ for (Iterator iterator = documents.iterator(); iterator.hasNext();) {
+ Document document = (Document) iterator.next();
+ VpeCreatorUtil.releaseDocumentFromRead(document);
+ }
+ includeDocuments.clear();
+ }
+// protected Map createXmlns(Element sourceNode) {
+// NamedNodeMap attrs = ((Element) sourceNode).getAttributes();
+// if (attrs != null) {
+// Map xmlnsMap = new HashMap();
+// for (int i = 0; i < attrs.getLength(); i++) {
+// addTaglib(sourceNode, xmlnsMap, attrs.item(i).getNodeName(),
+// true);
+// }
+// if (xmlnsMap.size() > 0) {
+// return xmlnsMap;
+// }
+// }
+// return null;
+// }
+
+// private void setXmlnsAttribute(VpeElementMapping elementMapping,
+// String name, String value) {
+// Element sourceElement = (Element) elementMapping.getSourceNode();
+// if (sourceElement != null) {
+// Map xmlnsMap = elementMapping.getXmlnsMap();
+// if (xmlnsMap == null)
+// xmlnsMap = new HashMap();
+// addTaglib(sourceElement, xmlnsMap, name, true);
+// elementMapping.setXmlnsMap(xmlnsMap.size() > 0 ? xmlnsMap : null);
+// }
+// }
+
+// private void removeXmlnsAttribute(VpeElementMapping elementMapping,
+// String name) {
+// Element sourceElement = (Element) elementMapping.getSourceNode();
+// if (sourceElement != null) {
+// Map xmlnsMap = elementMapping.getXmlnsMap();
+// if (xmlnsMap != null) {
+// Object id = xmlnsMap.remove(name);
+// if (id != null) {
+// pageContext.setTaglib(((Integer) id).intValue(), null,
+// null, true);
+// elementMapping.setXmlnsMap(xmlnsMap.size() > 0 ? xmlnsMap
+// : null);
+// }
+// }
+// }
+// }
+//
+// private void addTaglib(Element sourceElement, Map xmlnsMap,
+// String attrName, boolean ns) {
+// Attr attr = sourceElement.getAttributeNode(attrName);
+// if (ATTR_XMLNS.equals(attr.getPrefix())) {
+// xmlnsMap.put(attr.getNodeName(), Integer.valueOf(attr.hashCode()));
+// pageContext.setTaglib(attr.hashCode(), attr.getNodeValue(), attr
+// .getLocalName(), ns);
+// }
+// }
+
+ /**
+ * @return the dnd
+ */
+ public VpeDnD getDnd() {
+
+ return dnd;
+ }
+
+ /**
+ * @param dnd
+ * the dnd to set
+ */
+ public void setDnd(VpeDnD dnd) {
+
+ this.dnd = dnd;
+ }
+
+ /**
+ * @return the pageContext
+ */
+ protected VpePageContext getPageContext() {
+ return pageContext;
+ }
+
+ /**
+ * @param pageContext
+ * the pageContext to set
+ */
+ protected void setPageContext(VpePageContext pageContext) {
+ this.pageContext = pageContext;
+ }
+
+ /**
+ * @return the visualDocument
+ */
+ protected nsIDOMDocument getVisualDocument() {
+ return visualDocument;
+ }
+
+ /**
+ * @param visualDocument
+ * the visualDocument to set
+ */
+ protected void setVisualDocument(nsIDOMDocument visualDocument) {
+ this.visualDocument = visualDocument;
+ }
+
+ /**
+ * Check this file is facelet
+ *
+ * @return this if file is facelet, otherwize false
+ */
+ private boolean isFacelet() {
+ boolean isFacelet = false;
+
+ IEditorInput iEditorInput = pageContext.getEditPart().getEditorInput();
+ if (iEditorInput instanceof IFileEditorInput) {
+ IFileEditorInput iFileEditorInput = (IFileEditorInput) iEditorInput;
+
+ IFile iFile = iFileEditorInput.getFile();
+
+ IProject project = iFile.getProject();
+ IModelNature nature = EclipseResourceUtil.getModelNature(project);
+ if (nature != null) {
+ XModel model = nature.getModel();
+ XModelObject webXML = WebAppHelper.getWebApp(model);
+ XModelObject param = WebAppHelper.findWebAppContextParam(
+ webXML, "javax.faces.DEFAULT_SUFFIX");
+ if (param != null) {
+ String value = param.getAttributeValue("param-value");
+
+ if (value.length() != 0 && iFile.getName().endsWith(value)) {
+ isFacelet = true;
+ }
+ }
+ }
+ }
+
+ return isFacelet;
+ }
+
+ /**
+ * Create a visual element for text node
+ *
+ * @param sourceNode
+ * @param registerFlag
+ * @return a visual element for text node
+ */
+
+ protected nsIDOMNode createTextNode(Node sourceNode, boolean registerFlag) {
+ String sourceText = sourceNode.getNodeValue();
//Max Areshkau this code causes very slow work of visual editor
//when we editing in big files txt nodes.For example exmployee.xhtml from JBIDE1105
@@ -2096,48 +2098,48 @@
// registerNodes(new VpeNodeMapping(sourceNode, null));
// return null;
// }
-
- if (faceletFile) {
- Matcher matcher_EL = REGEX_EL.matcher(sourceText);
- if (matcher_EL.find()) {
- BundleMap bundle = pageContext.getBundle();
- int offset = pageContext.getVisualBuilder()
- .getCurrentMainIncludeOffset();
- if (offset == -1)
- offset = ((IndexedRegion) sourceNode).getStartOffset();
- String jsfValue = bundle.getBundleValue(sourceText, offset);
- sourceText = jsfValue;
- }
- }
- String visualText = TextUtil.visualText(sourceText);
-
- nsIDOMNode visualNewTextNode = visualDocument
- .createTextNode(visualText);
- nsIDOMElement element = visualDocument.createElement(HTML.TAG_SPAN);
- element.appendChild(visualNewTextNode);
- if (registerFlag) {
- registerNodes(new VpeNodeMapping(sourceNode, element));
- }
-
- return element;
+
+ if (faceletFile) {
+ Matcher matcher_EL = REGEX_EL.matcher(sourceText);
+ if (matcher_EL.find()) {
+ BundleMap bundle = pageContext.getBundle();
+ int offset = pageContext.getVisualBuilder()
+ .getCurrentMainIncludeOffset();
+ if (offset == -1)
+ offset = ((IndexedRegion) sourceNode).getStartOffset();
+ String jsfValue = bundle.getBundleValue(sourceText, offset);
+ sourceText = jsfValue;
+ }
+ }
+ String visualText = TextUtil.visualText(sourceText);
+
+ nsIDOMNode visualNewTextNode = visualDocument
+ .createTextNode(visualText);
+ nsIDOMElement element = visualDocument.createElement(HTML.TAG_SPAN);
+ element.appendChild(visualNewTextNode);
+ if (registerFlag) {
+ registerNodes(new VpeNodeMapping(sourceNode, element));
+ }
+
+ return element;
+ }
+
+ /**
+ * @return the xulRunnerEditor
+ */
+ public XulRunnerEditor getXulRunnerEditor() {
+ return xulRunnerEditor;
+ }
+
+ /**
+ * @param xulRunnerEditor
+ * the xulRunnerEditor to set
+ */
+ public void setXulRunnerEditor(XulRunnerEditor xulRunnerEditor) {
+ this.xulRunnerEditor = xulRunnerEditor;
}
- /**
- * @return the xulRunnerEditor
- */
- public XulRunnerEditor getXulRunnerEditor() {
- return xulRunnerEditor;
- }
-
- /**
- * @param xulRunnerEditor
- * the xulRunnerEditor to set
- */
- public void setXulRunnerEditor(XulRunnerEditor xulRunnerEditor) {
- this.xulRunnerEditor = xulRunnerEditor;
- }
-
public Map<IFile, Document> getIncludeDocuments() {
return includeDocuments;
- }
-}
+ }
+}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/context/VpePageContext.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/context/VpePageContext.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/context/VpePageContext.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -1,469 +1,384 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.vpe.editor.context;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController;
-import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager;
-import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.jboss.tools.common.kb.KbConnectorFactory;
-import org.jboss.tools.common.kb.KbConnectorType;
-import org.jboss.tools.common.kb.KbTldResource;
-import org.jboss.tools.common.kb.wtp.JspWtpKbConnector;
-import org.jboss.tools.common.kb.wtp.TLDVersionHelper;
-import org.jboss.tools.common.kb.wtp.WtpKbConnector;
-import org.jboss.tools.common.model.XModel;
-import org.jboss.tools.common.model.project.IModelNature;
-import org.jboss.tools.common.model.util.EclipseResourceUtil;
-import org.jboss.tools.jst.jsp.editor.IVisualContext;
-import org.jboss.tools.jst.jsp.editor.TLDRegisterHelper;
-import org.jboss.tools.jst.jsp.preferences.VpePreference;
-import org.jboss.tools.jst.web.tld.TaglibData;
-import org.jboss.tools.jst.web.tld.VpeTaglibListener;
-import org.jboss.tools.jst.web.tld.VpeTaglibManager;
-import org.jboss.tools.vpe.VpeDebug;
-import org.jboss.tools.vpe.VpePlugin;
-import org.jboss.tools.vpe.editor.VpeEditorPart;
-import org.jboss.tools.vpe.editor.VpeSourceDomBuilder;
-import org.jboss.tools.vpe.editor.VpeVisualDomBuilder;
-import org.jboss.tools.vpe.editor.bundle.BundleMap;
-import org.jboss.tools.vpe.editor.css.AbsoluteFolderReferenceList;
-import org.jboss.tools.vpe.editor.css.CSSReferenceList;
-import org.jboss.tools.vpe.editor.css.RelativeFolderReferenceList;
-import org.jboss.tools.vpe.editor.css.ResourceReference;
-import org.jboss.tools.vpe.editor.css.TaglibReferenceList;
-import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
-import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
-import org.jboss.tools.vpe.editor.util.FileUtil;
-import org.mozilla.interfaces.nsIDOMNode;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * Contains the information on edited page.
- */
-
-public class VpePageContext implements VpeTaglibManager, IVisualContext {
- private VpeTemplateManager templateManager;
- private List taglibs = new ArrayList();
- private Set connectorDocuments = new HashSet();
- private Map taglibMap = new HashMap();
- private VpeTaglibListener[] taglibListeners = new VpeTaglibListener[0];
- private BundleMap bundle;
- private Set bundleDependencySet = new HashSet();
- private VpeSourceDomBuilder sourceBuilder;
- private VpeVisualDomBuilder visualBuilder;
- private VpeEditorPart editPart;
- private List lastTaglibs = new ArrayList();
- private boolean taglibChanged = false;
- WtpKbConnector connector;
- private nsIDOMNode currentVisualNode;
-
- public VpePageContext(VpeTemplateManager templateManager, BundleMap bundle, VpeEditorPart editPart) {
- this.templateManager = templateManager;
- this.bundle = bundle;
- this.editPart = editPart;
- }
-
- public VpeSourceDomBuilder getSourceBuilder(){
- return sourceBuilder;
- }
-
- public boolean isAbsolutePosition(){
- if("yes".equals(VpePreference.USE_ABSOLUTE_POSITION.getValue()))return true;
- else return false;
- }
-
- public void setSourceDomBuilder(VpeSourceDomBuilder sourceBuilder) {
- this.sourceBuilder = sourceBuilder;
- refreshConnector();
- }
-
- public void refreshConnector() {
- try {
- IDocument document = sourceBuilder.getStructuredTextViewer().getDocument();
- if (document!= null) {
- connectorDocuments.add(document);
- connector = (WtpKbConnector)KbConnectorFactory.getIntstance().createConnector(KbConnectorType.JSP_WTP_KB_CONNECTOR, document);
- }
- } catch (Exception e) {
- VpePlugin.getPluginLog().logError(e);
- }
- }
-
- public VpeVisualDomBuilder getVisualBuilder(){
- return visualBuilder;
- }
-
- public void setVisualDomBuilder(VpeVisualDomBuilder visualBuilder) {
- this.visualBuilder = visualBuilder;
- }
-
- public VpeDomMapping getDomMapping () {
- return visualBuilder.getDomMapping();
- }
-
- public void clearAll() {
- taglibs.clear();
- taglibMap.clear();
- bundleDependencySet.clear();
- bundle.clearAll();
- }
-
- public void dispose() {
+/*******************************************************************************
+ * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.editor.context;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.common.kb.KbConnectorFactory;
+import org.jboss.tools.common.kb.KbConnectorType;
+import org.jboss.tools.common.kb.wtp.WtpKbConnector;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.jst.jsp.preferences.VpePreference;
+import org.jboss.tools.jst.web.tld.TaglibData;
+import org.jboss.tools.jst.web.tld.VpeTaglibListener;
+import org.jboss.tools.jst.web.tld.VpeTaglibManager;
+import org.jboss.tools.vpe.VpePlugin;
+import org.jboss.tools.vpe.editor.VpeEditorPart;
+import org.jboss.tools.vpe.editor.VpeSourceDomBuilder;
+import org.jboss.tools.vpe.editor.VpeVisualDomBuilder;
+import org.jboss.tools.vpe.editor.bundle.BundleMap;
+import org.jboss.tools.vpe.editor.css.AbsoluteFolderReferenceList;
+import org.jboss.tools.vpe.editor.css.CSSReferenceList;
+import org.jboss.tools.vpe.editor.css.RelativeFolderReferenceList;
+import org.jboss.tools.vpe.editor.css.ResourceReference;
+import org.jboss.tools.vpe.editor.css.TaglibReferenceList;
+import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
+import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
+import org.jboss.tools.vpe.editor.util.FileUtil;
+import org.mozilla.interfaces.nsIDOMNode;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * Contains the information on edited page.
+ */
+
+public class VpePageContext implements IVisualContext {
+ private Set connectorDocuments = new HashSet();
+ private BundleMap bundle;
+ private Set bundleDependencySet = new HashSet();
+ private VpeSourceDomBuilder sourceBuilder;
+ private VpeVisualDomBuilder visualBuilder;
+ private VpeEditorPart editPart;
+ WtpKbConnector connector;
+ private nsIDOMNode currentVisualNode;
+
+ public VpePageContext(VpeTemplateManager templateManager, BundleMap bundle, VpeEditorPart editPart) {
+ this.bundle = bundle;
+ this.editPart = editPart;
+ }
+
+ public VpeSourceDomBuilder getSourceBuilder(){
+ return sourceBuilder;
+ }
+
+ public boolean isAbsolutePosition(){
+ if("yes".equals(VpePreference.USE_ABSOLUTE_POSITION.getValue()))return true;
+ else return false;
+ }
+
+ public void setSourceDomBuilder(VpeSourceDomBuilder sourceBuilder) {
+ this.sourceBuilder = sourceBuilder;
+ refreshConnector();
+ }
+
+ public void refreshConnector() {
+ try {
+ IDocument document = sourceBuilder.getStructuredTextViewer().getDocument();
+ connector = (WtpKbConnector)KbConnectorFactory.getIntstance().createConnector(KbConnectorType.JSP_WTP_KB_CONNECTOR, document);
+ } catch (Exception e) {
+ VpePlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public VpeVisualDomBuilder getVisualBuilder(){
+ return visualBuilder;
+ }
+
+ public void setVisualDomBuilder(VpeVisualDomBuilder visualBuilder) {
+ this.visualBuilder = visualBuilder;
+ }
+
+ public VpeDomMapping getDomMapping () {
+ return visualBuilder.getDomMapping();
+ }
+
+ public void clearAll() {
+ bundleDependencySet.clear();
+ bundle.clearAll();
+ }
+
+ public void dispose() {
for (Iterator iterator = connectorDocuments.iterator(); iterator.hasNext();) {
IDocument document = (IDocument) iterator.next();
KbConnectorFactory.getIntstance().removeConnector(KbConnectorType.JSP_WTP_KB_CONNECTOR, document);
}
connectorDocuments.clear();
connectorDocuments = null;
- bundle.dispose();
- clearAll();
- taglibListeners=null;
- editPart=null;
- connector=null;
- sourceBuilder=null;
- visualBuilder=null;
- }
-
- public void setTaglib(int id, String newUri, String newPrefix, boolean ns) {
- if (newUri != null && newPrefix != null) {
- TaglibData data = new TaglibData(id, newUri, newPrefix, ns);
- if (!taglibs.contains(data)) {
- taglibs.add(data);
- rebuildTaglibMap();
- }
- }
- /*for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- if (taglib.getId() == id) {
- if (newUri != null && newPrefix != null) {
- if (!newUri.equals(taglib.getUri()) || !newPrefix.equals(taglib.getPrefix())) {
- taglibs.set(i, new TaglibData(id, newUri, newPrefix, ns));
- rebuildTaglibMap();
- }
- } else {
- taglibs.remove(i);
- rebuildTaglibMap();
- }
- return;
- }
- }
- if (newUri != null && newPrefix != null) {
- taglibs.add(new TaglibData(id, newUri, newPrefix, ns));
- rebuildTaglibMap();
- }*/
- }
-
- public String getTemplateTaglibPrefix(String sourceTaglibPrefix) {
- return (String) taglibMap.get(sourceTaglibPrefix);
- }
-
- private void rebuildTaglibMap() {
- taglibMap.clear();
- Set prefixSet = new HashSet();
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- String prefix = taglib.getPrefix();
- if (!prefixSet.contains(prefix)) {
- String templatePrefix = templateManager.getTemplateTaglibPrefix(taglib.getUri());
- if (templatePrefix != null) {
- taglibMap.put(prefix, templatePrefix);
- }
- prefixSet.add(prefix);
- }
- }
- taglibChanged = true;
-
- try {
- registerTaglibs(connector, this, getSourceBuilder().getStructuredTextViewer().getDocument());
- } catch (Exception e) {
- VpePlugin.getPluginLog().logError(e);
- }
- }
-
- public void addTaglibListener(VpeTaglibListener listener) {
- if (listener != null) {
- VpeTaglibListener[] newTaglibListeners = new VpeTaglibListener[taglibListeners.length + 1];
- System.arraycopy(taglibListeners, 0, newTaglibListeners, 0, taglibListeners.length);
- taglibListeners = newTaglibListeners;
- taglibListeners[taglibListeners.length - 1] = listener;
- }
- }
-
- public void removeTaglibListener(VpeTaglibListener listener) {
- if (listener == null || taglibListeners.length == 0) return;
- int index = -1;
- for (int i = 0; i < taglibListeners.length; i++) {
- if (listener == taglibListeners[i]){
- index = i;
- break;
- }
- }
- if (index == -1) return;
- if (taglibListeners.length == 1) {
- taglibListeners = new VpeTaglibListener[0];
- return;
- }
- VpeTaglibListener[] newTaglibListeners = new VpeTaglibListener[taglibListeners.length - 1];
- System.arraycopy(taglibListeners, 0, newTaglibListeners, 0, index);
- System.arraycopy(taglibListeners, index + 1, newTaglibListeners, index, taglibListeners.length - index - 1);
- taglibListeners = newTaglibListeners;
- }
-
- public BundleMap getBundle() {
- return bundle;
- }
-
- public void addBundleDependency(Element sourceNode) {
- bundleDependencySet.add(sourceNode);
- }
-
- public void removeBundleDependency(Element sourceNode) {
- bundleDependencySet.remove(sourceNode);
- }
-
- public void refreshBundleValues() {
- Iterator iterator = bundleDependencySet.iterator();
- while (iterator.hasNext()) {
- Element sourceElement = (Element) iterator.next();
- visualBuilder.refreshBundleValues(sourceElement);
- }
- }
-
- public boolean isCorrectNS(Node sourceNode) {
- String sourcePrefix = sourceNode.getPrefix();
- if (sourcePrefix == null || ((ElementImpl)sourceNode).isJSPTag()) {
- return true;
- }
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- if (sourcePrefix.equals(taglib.getPrefix())) {
- return true;
- }
- }
- return false;
- }
-
- public String getSourceTaglibUri(Node sourceNode) {
- String sourcePrefix = sourceNode.getPrefix();
- if (sourcePrefix == null || ((ElementImpl)sourceNode).isJSPTag()) {
- return null;
- }
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData taglib = (TaglibData)taglibs.get(i);
- if (sourcePrefix.equals(taglib.getPrefix())) {
- return taglib.getUri();
- }
- }
- return null;
- }
-
- public VpeEditorPart getEditPart() {
- return editPart;
- }
-
- public void openIncludeFile(String file) {
- IEditorInput input = editPart.getEditorInput();
- IWorkbenchPage workbenchPage = VpePlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();
- try{
- IFile f = FileUtil.getFile(input, file);
- if (f != null) {
- IDE.openEditor(workbenchPage, f, true);
- }
- }catch(Exception ex){
- VpePlugin.reportProblem(ex);
- }
- }
-
- public ResourceReference[] getIncludeTaglibs() {
- IEditorInput input = getEditPart().getEditorInput();
- IFile file = null;
- if (input instanceof IFileEditorInput) {
- file = ((IFileEditorInput)input).getFile();
- }
- ResourceReference[] resourceReferences = new ResourceReference[0];
- if (file != null) {
- resourceReferences = TaglibReferenceList.getInstance().getAllResources(file);
- }
- return resourceReferences;
- }
-
- public ResourceReference[] getIncludeCss() {
- IEditorInput input = getEditPart().getEditorInput();
- IFile file = null;
- if (input instanceof IFileEditorInput) {
- file = ((IFileEditorInput)input).getFile();
- }
- ResourceReference[] resourceReferences = new ResourceReference[0];
- if (file != null) {
- resourceReferences = CSSReferenceList.getInstance().getAllResources(file);
- }
- return resourceReferences;
- }
-
- public void installIncludeElements() {
- ResourceReference[] list = getIncludeTaglibs();
- for (int i = 0; i < list.length; i++) {
- ResourceReference reference = list[i];
- setTaglib(i, reference.getLocation(), reference.getProperties(), false);
- }
-
- list = getIncludeCss();
- for (int i = 0; i < list.length; i++) {
- visualBuilder.addLinkNodeToHead(list[i].getLocation(), "yes");
- }
- }
-
- public ResourceReference getRuntimeRelativeFolder(IFile file) {
- ResourceReference[] list = RelativeFolderReferenceList.getInstance().getAllResources(file);
- if (list.length > 0) {
- return list[list.length - 1];
- }
- return null;
- }
-
- public ResourceReference getRuntimeAbsoluteFolder(IFile file) {
- ResourceReference[] list = AbsoluteFolderReferenceList.getInstance().getAllResources(file);
- if (list.length > 0) {
- return list[list.length - 1];
- }
- return null;
- }
-
- public List<TaglibData> getTagLibs() {
- List<TaglibData> clone = new ArrayList<TaglibData>();
- Iterator iter = taglibs.iterator();
- while (iter.hasNext()) {
- TaglibData taglib = (TaglibData)iter.next();
- //if (!taglib.inList(clone)) {
- if (!clone.contains(taglib)) {
- clone.add(taglib);
- }
- }
- return clone;
- }
-
- private boolean buildTaglibsDifferences(List newTaglibs, List delTaglibs) {
- Iterator lastIter = lastTaglibs.iterator();
- while (lastIter.hasNext()) {
- TaglibData oldTaglib = (TaglibData)lastIter.next();
- Iterator newIter = newTaglibs.iterator();
- while (newIter.hasNext()) {
- //if (oldTaglib.isEquals((TaglibData)newIter.next())) {
- if (oldTaglib.equals((TaglibData)newIter.next())) {
- newIter.remove();
- oldTaglib = null;
- break;
- }
- }
- if (oldTaglib != null) {
- delTaglibs.add(oldTaglib);
- }
- }
- return newTaglibs.size() > 0 || delTaglibs.size() > 0;
- }
-
- public void fireTaglibsChanged() {
- List newTaglibs = getTagLibs();
- List delTaglibs = new ArrayList();
- if (buildTaglibsDifferences(newTaglibs, delTaglibs)) {
- if (VpeDebug.PRINT_SOURCE_MUTATION_EVENT) {
- System.out.println(">>> TaglibsChanged");
- }
- for (int i = 0; i < taglibListeners.length; i++) {
- taglibListeners[i].taglibPrefixChanged(null);
- fireTaglibChanged(taglibListeners[i], newTaglibs, delTaglibs);
- }
- lastTaglibs = getTagLibs();
- }
- taglibChanged = false;
- }
-
- private void fireTaglibChanged(VpeTaglibListener taglibListener, List newTaglibs, List delTaglibs) {
- Iterator iter = delTaglibs.iterator();
- while (iter.hasNext()) {
- TaglibData taglib = (TaglibData)iter.next();
- taglibListener.removeTaglib(taglib.getUri(), taglib.getPrefix());
- }
- iter = newTaglibs.iterator();
- while (iter.hasNext()) {
- TaglibData taglib = (TaglibData)iter.next();
- taglibListener.addTaglib(taglib.getUri(), taglib.getPrefix());
- }
- }
-
- public boolean isTaglibChanged() {
- //TODO Max Areshkau coused slow work vpe when we editing on source page text node
-// if (!taglibChanged) return false;
-// List newTaglibs = getTagLibs();
-// List delTaglibs = new ArrayList();
-// return buildTaglibsDifferences(newTaglibs, delTaglibs);
- return false;
- }
-
- public WtpKbConnector getConnector() {
- return connector;
- }
-
- boolean registerTaglibs(WtpKbConnector wtpKbConnector, VpeTaglibManager taglibManager, IDocument document) {
- if(wtpKbConnector == null) return false;
- TLDCMDocumentManager manager = TaglibController.getTLDCMDocumentManager(document);
- if(taglibManager != null) {
- List list = taglibManager.getTagLibs();
- if(list != null) {
- Iterator it = list.iterator();
- while(it.hasNext()) {
- TaglibData data = (TaglibData)it.next();
- IEditorInput ei = editPart.getEditorInput();
- TLDRegisterHelper.registerTld(data, (JspWtpKbConnector)wtpKbConnector, document, ei);
- }
- return true;
- }
- }
- if(manager != null) {
- List list = manager.getTaglibTrackers();
- for (int i = 0; i < list.size(); i++) {
- TaglibTracker tracker = (TaglibTracker)list.get(i);
- if(tracker == null) continue;
- String version = TLDVersionHelper.getTldVersion(tracker);
- KbTldResource resource = new KbTldResource(tracker.getURI(), "", tracker.getPrefix(), version);
- wtpKbConnector.registerResource(resource);
- }
- return true;
- }
- return false;
- }
-
- public nsIDOMNode getCurrentVisualNode() {
- return currentVisualNode;
- }
-
- public void setCurrentVisualNode(nsIDOMNode currentVisualNode) {
- this.currentVisualNode = currentVisualNode;
- }
-
+ bundle.dispose();
+ clearAll();
+ editPart=null;
+ connector=null;
+ sourceBuilder=null;
+ visualBuilder=null;
+ }
+
+ public BundleMap getBundle() {
+ return bundle;
+ }
+
+ public void addBundleDependency(Element sourceNode) {
+ bundleDependencySet.add(sourceNode);
+ }
+
+ public void removeBundleDependency(Element sourceNode) {
+ bundleDependencySet.remove(sourceNode);
+ }
+
+ public void refreshBundleValues() {
+ Iterator iterator = bundleDependencySet.iterator();
+ while (iterator.hasNext()) {
+ Element sourceElement = (Element) iterator.next();
+ visualBuilder.refreshBundleValues(sourceElement);
+ }
+ }
+
+// public boolean isCorrectNS(Node sourceNode) {
+// String sourcePrefix = sourceNode.getPrefix();
+// if (sourcePrefix == null || ((ElementImpl)sourceNode).isJSPTag()) {
+// return true;
+// }
+// for (int i = 0; i < taglibs.size(); i++) {
+// TaglibData taglib = (TaglibData)taglibs.get(i);
+// if (sourcePrefix.equals(taglib.getPrefix())) {
+// return true;
+// }
+// }
+// return false;
+// }
+
+// public String getSourceTaglibUri(Node sourceNode) {
+// String sourcePrefix = sourceNode.getPrefix();
+// if (sourcePrefix == null || ((ElementImpl)sourceNode).isJSPTag()) {
+// return null;
+// }
+// for (int i = 0; i < taglibs.size(); i++) {
+// TaglibData taglib = (TaglibData)taglibs.get(i);
+// if (sourcePrefix.equals(taglib.getPrefix())) {
+// return taglib.getUri();
+// }
+// }
+// return null;
+// }
+
+ public VpeEditorPart getEditPart() {
+ return editPart;
+ }
+
+ public void openIncludeFile(String file) {
+ IEditorInput input = editPart.getEditorInput();
+ IWorkbenchPage workbenchPage = VpePlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ try{
+ IFile f = FileUtil.getFile(input, file);
+ if (f != null) {
+ IDE.openEditor(workbenchPage, f, true);
+ }
+ }catch(Exception ex){
+ VpePlugin.reportProblem(ex);
+ }
+ }
+
+ public ResourceReference[] getIncludeTaglibs() {
+ IEditorInput input = getEditPart().getEditorInput();
+ IFile file = null;
+ if (input instanceof IFileEditorInput) {
+ file = ((IFileEditorInput)input).getFile();
+ }
+ ResourceReference[] resourceReferences = new ResourceReference[0];
+ if (file != null) {
+ resourceReferences = TaglibReferenceList.getInstance().getAllResources(file);
+ }
+ return resourceReferences;
+ }
+
+ public ResourceReference[] getIncludeCss() {
+ IEditorInput input = getEditPart().getEditorInput();
+ IFile file = null;
+ if (input instanceof IFileEditorInput) {
+ file = ((IFileEditorInput)input).getFile();
+ }
+ ResourceReference[] resourceReferences = new ResourceReference[0];
+ if (file != null) {
+ resourceReferences = CSSReferenceList.getInstance().getAllResources(file);
+ }
+ return resourceReferences;
+ }
+
+ public void installIncludeElements() {
+ ResourceReference[] list = getIncludeTaglibs();
+ for (int i = 0; i < list.length; i++) {
+ ResourceReference reference = list[i];
+// setTaglib(i, reference.getLocation(), reference.getProperties(), false);
+ }
+
+ list = getIncludeCss();
+ for (int i = 0; i < list.length; i++) {
+ visualBuilder.addLinkNodeToHead(list[i].getLocation(), "yes");
+ }
+ }
+
+ public ResourceReference getRuntimeRelativeFolder(IFile file) {
+ ResourceReference[] list = RelativeFolderReferenceList.getInstance().getAllResources(file);
+ if (list.length > 0) {
+ return list[list.length - 1];
+ }
+ return null;
+ }
+
+ public ResourceReference getRuntimeAbsoluteFolder(IFile file) {
+ ResourceReference[] list = AbsoluteFolderReferenceList.getInstance().getAllResources(file);
+ if (list.length > 0) {
+ return list[list.length - 1];
+ }
+ return null;
+ }
+
+// public List<TaglibData> getTagLibs() {
+// List<TaglibData> clone = new ArrayList<TaglibData>();
+// Iterator iter = taglibs.iterator();
+// while (iter.hasNext()) {
+// TaglibData taglib = (TaglibData)iter.next();
+// if (!taglib.inList(clone)) {
+// clone.add(taglib);
+// }
+// }
+// return clone;
+// }
+
+// private boolean buildTaglibsDifferences(List newTaglibs, List delTaglibs) {
+// Iterator lastIter = lastTaglibs.iterator();
+// while (lastIter.hasNext()) {
+// TaglibData oldTaglib = (TaglibData)lastIter.next();
+// Iterator newIter = newTaglibs.iterator();
+// while (newIter.hasNext()) {
+// if (oldTaglib.isEquals((TaglibData)newIter.next())) {
+// newIter.remove();
+// oldTaglib = null;
+// break;
+// }
+// }
+// if (oldTaglib != null) {
+// delTaglibs.add(oldTaglib);
+// }
+// }
+// return newTaglibs.size() > 0 || delTaglibs.size() > 0;
+// }
+
+// public void fireTaglibsChanged() {
+// List newTaglibs = getTagLibs();
+// List delTaglibs = new ArrayList();
+// if (buildTaglibsDifferences(newTaglibs, delTaglibs)) {
+// if (VpeDebug.PRINT_SOURCE_MUTATION_EVENT) {
+// System.out.println(">>> TaglibsChanged");
+// }
+// for (int i = 0; i < taglibListeners.length; i++) {
+// taglibListeners[i].taglibPrefixChanged(null);
+// fireTaglibChanged(taglibListeners[i], newTaglibs, delTaglibs);
+// }
+// lastTaglibs = getTagLibs();
+// }
+// taglibChanged = false;
+// }
+
+ private void fireTaglibChanged(VpeTaglibListener taglibListener, List newTaglibs, List delTaglibs) {
+ Iterator iter = delTaglibs.iterator();
+ while (iter.hasNext()) {
+ TaglibData taglib = (TaglibData)iter.next();
+ taglibListener.removeTaglib(taglib.getUri(), taglib.getPrefix());
+ }
+ iter = newTaglibs.iterator();
+ while (iter.hasNext()) {
+ TaglibData taglib = (TaglibData)iter.next();
+ taglibListener.addTaglib(taglib.getUri(), taglib.getPrefix());
+ }
+ }
+
+// public boolean isTaglibChanged() {
+// if (!taglibChanged) return false;
+// List newTaglibs = getTagLibs();
+// List delTaglibs = new ArrayList();
+// return buildTaglibsDifferences(newTaglibs, delTaglibs);
+// }
+
+ public WtpKbConnector getConnector() {
+ return connector;
+ }
+
+ public void addTaglibListener(VpeTaglibListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public List<TaglibData> getTagLibs() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void removeTaglibListener(VpeTaglibListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setReferenceNode(Node node) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @return the currentVisualNode
+ */
+ public nsIDOMNode getCurrentVisualNode() {
+ return currentVisualNode;
+ }
+
+ /**
+ * @param currentVisualNode the currentVisualNode to set
+ */
+ public void setCurrentVisualNode(nsIDOMNode currentVisualNode) {
+ this.currentVisualNode = currentVisualNode;
+ }
+
+// boolean registerTaglibs(WtpKbConnector wtpKbConnector, VpeTaglibManager taglibManager, IDocument document) {
+// if(wtpKbConnector == null) return false;
+// TLDCMDocumentManager manager = TaglibController.getTLDCMDocumentManager(document);
+// if(taglibManager != null) {
+// List list = taglibManager.getTagLibs();
+// if(list != null) {
+// Iterator it = list.iterator();
+// while(it.hasNext()) {
+// TaglibData data = (TaglibData)it.next();
+// IEditorInput ei = editPart.getEditorInput();
+// TLDRegisterHelper.registerTld(data, (JspWtpKbConnector)wtpKbConnector, document, ei);
+// }
+// return true;
+// }
+// }
+// if(manager != null) {
+// List list = manager.getTaglibTrackers();
+// for (int i = 0; i < list.size(); i++) {
+// TaglibTracker tracker = (TaglibTracker)list.get(i);
+// if(tracker == null) continue;
+// String version = TLDVersionHelper.getTldVersion(tracker);
+// KbTldResource resource = new KbTldResource(tracker.getURI(), "", tracker.getPrefix(), version);
+// wtpKbConnector.registerResource(resource);
+// }
+// return true;
+// }
+// return false;
+// }
+
+// public nsIDOMNode getCurrentVisualNode() {
+// return currentVisualNode;
+// }
+//
+// public void setCurrentVisualNode(nsIDOMNode currentVisualNode) {
+// this.currentVisualNode = currentVisualNode;
+// }
+
}
\ No newline at end of file
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeDomMapping.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeDomMapping.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeDomMapping.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -281,13 +281,13 @@
}
if (nodeMapping.getType() == VpeNodeMapping.ELEMENT_MAPPING) {
VpeElementMapping elementMapping = (VpeElementMapping)nodeMapping;
- Map xmlnsMap = elementMapping.getXmlnsMap();
- if (xmlnsMap != null) {
- for (Iterator iter = xmlnsMap.values().iterator(); iter.hasNext();) {
- pageContext.setTaglib(((Integer)iter.next()).intValue(), null, null, true);
- }
- elementMapping.setXmlnsMap(null);
- }
+// Map xmlnsMap = elementMapping.getXmlnsMap();
+// if (xmlnsMap != null) {
+// for (Iterator iter = xmlnsMap.values().iterator(); iter.hasNext();) {
+// pageContext.setTaglib(((Integer)iter.next()).intValue(), null, null, true);
+// }
+// elementMapping.setXmlnsMap(null);
+// }
if (elementMapping.getBorder() != null) {
visualMap.remove(elementMapping.getBorder());
}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeElementMapping.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeElementMapping.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/mapping/VpeElementMapping.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -10,9 +10,7 @@
******************************************************************************/
package org.jboss.tools.vpe.editor.mapping;
-import java.util.Map;
import java.util.Set;
-
import org.jboss.tools.vpe.editor.template.VpeTemplate;
import org.jboss.tools.vpe.editor.template.expression.VpeExpressionBuilder;
import org.mozilla.interfaces.nsIDOMElement;
@@ -22,7 +20,7 @@
public class VpeElementMapping extends VpeNodeMapping {
private VpeTemplate template;
private Set ifDependencySet;
- private Map xmlnsMap;
+// private Map xmlnsMap;
private Object data;
private nsIDOMElement border;
@@ -44,14 +42,14 @@
return template;
}
- public Map getXmlnsMap() {
- return xmlnsMap;
- }
+// public Map getXmlnsMap() {
+// return xmlnsMap;
+// }
+//
+// public void setXmlnsMap(Map xmlnsMap) {
+// this.xmlnsMap = xmlnsMap;
+// }
- public void setXmlnsMap(Map xmlnsMap) {
- this.xmlnsMap = xmlnsMap;
- }
-
public Object getData() {
return data;
}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -108,10 +108,12 @@
} else if (VpeTemplateManager.TAG_ANY.equals(name)) {
type = TYPE_ANY;
creator = new VpeAnyCreator(templateSection, dependencyMap, caseSensitive);
- } else if (VpeTemplateManager.TAG_TAGLIB.equals(name)) {
- type = TYPE_TAGLIB;
- creator = new VpeTaglibCreator(templateSection, dependencyMap);
- } else if (VpeTemplateManager.TAG_LINK.equals(name)) {
+ }
+// else if (VpeTemplateManager.TAG_TAGLIB.equals(name)) {
+// type = TYPE_TAGLIB;
+// creator = new VpeTaglibCreator(templateSection, dependencyMap);
+// }
+ else if (VpeTemplateManager.TAG_LINK.equals(name)) {
type = TYPE_LINK;
creator = new VpeLinkCreator(templateSection, dependencyMap, caseSensitive);
} else if (VpeTemplateManager.TAG_LOAD_BUNDLE.equals(name)) {
@@ -308,14 +310,15 @@
private String getPageLocale(VpePageContext pageContext, IDOMElement sourceElement) {
IStructuredModel model = null;
- try {
- List<TaglibData> taglibs = pageContext.getTagLibs();
+ try {
+ //TODO JBIDE-788 Max Areshkau Fix That
+// List<TaglibData> taglibs = pageContext.getTagLibs();
// Find F tracker
TaglibData fTD = null;
- for (int i = 0; i < taglibs.size(); i++) {
- TaglibData td = (TaglibData)taglibs.get(i);
- if ("http://java.sun.com/jsf/core".equals(td.getUri())) fTD = td;
- }
+// for (int i = 0; i < taglibs.size(); i++) {
+// TaglibData td = (TaglibData)taglibs.get(i);
+// if ("http://java.sun.com/jsf/core".equals(td.getUri())) fTD = td;
+// }
if (fTD == null || fTD.getPrefix() == null || fTD.getPrefix().length() == 0) return null;
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeJspRootCreator.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeJspRootCreator.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeJspRootCreator.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -49,26 +49,26 @@
public void removeAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name) {
int address = getAddress(name);
- if (address > 0) {
- pageContext.setTaglib(address, null, null, true);
- }
+// if (address > 0) {
+// pageContext.setTaglib(address, null, null, true);
+// }
// setTaglib(pageContext, sourceElement);
}
- private void setTaglib(VpePageContext pageContext, Element sourceElement) {
- attrs = new ArrayList();
- NamedNodeMap attributes = sourceElement.getAttributes();
- for (int i = 0; i < attributes.getLength(); i++) {
- Attr attr = (Attr)attributes.item(i);
- String name = attr.getNodeName();
- if (name.indexOf(ATTR_PREFIX) == 0) {
- String prefix = name.substring(6);
- String uri = attr.getNodeValue();
- pageContext.setTaglib(attr.hashCode(), uri, prefix, true);
- attrs.add(new AttrElement(attr.hashCode(), name));
- }
- }
- }
+// private void setTaglib(VpePageContext pageContext, Element sourceElement) {
+// attrs = new ArrayList();
+// NamedNodeMap attributes = sourceElement.getAttributes();
+// for (int i = 0; i < attributes.getLength(); i++) {
+// Attr attr = (Attr)attributes.item(i);
+// String name = attr.getNodeName();
+// if (name.indexOf(ATTR_PREFIX) == 0) {
+// String prefix = name.substring(6);
+// String uri = attr.getNodeValue();
+//// pageContext.setTaglib(attr.hashCode(), uri, prefix, true);
+// attrs.add(new AttrElement(attr.hashCode(), name));
+// }
+// }
+// }
private int getAddress(String name) {
for (int i = 0; i < attrs.size(); i++) {
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTaglibCreator.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTaglibCreator.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTaglibCreator.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -21,39 +21,40 @@
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
-public class VpeTaglibCreator extends VpeAbstractCreator {
- private static final String ATTR_URI = "uri";
- private static final String ATTR_PREFIX = "prefix";
-
- VpeTaglibCreator(Element taglibElement, VpeDependencyMap dependencyMap) {
- build(taglibElement, dependencyMap);
- }
-
- private void build(Element taglibElement, VpeDependencyMap dependencyMap) {
- dependencyMap.setCreator(this, VpeExpressionBuilder.attrSignature(ATTR_URI, true));
- dependencyMap.setCreator(this, VpeExpressionBuilder.attrSignature(ATTR_PREFIX, true));
- }
-
- public VpeCreatorInfo create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument, nsIDOMElement visualElement, Map visualNodeMap) {
- setTaglib(pageContext, (Element)sourceNode);
- return null;
- }
-
- public void setAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name, String value) {
- setTaglib(pageContext, sourceElement);
- }
-
- public void removeAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name) {
- setTaglib(pageContext, sourceElement);
- }
-
- public void removeElement(VpePageContext pageContext, Element sourceElement, Map visualNodeMap) {
- pageContext.setTaglib(sourceElement.hashCode(), null, null, false);
- }
-
- private void setTaglib(VpePageContext pageContext, Element sourceElement) {
- String uri = sourceElement.getAttribute(ATTR_URI);
- String prefix = sourceElement.getAttribute(ATTR_PREFIX);
- pageContext.setTaglib(sourceElement.hashCode(), uri, prefix, false);
- }
+public class VpeTaglibCreator //extends VpeAbstractCreator
+{
+// private static final String ATTR_URI = "uri";
+// private static final String ATTR_PREFIX = "prefix";
+//
+// VpeTaglibCreator(Element taglibElement, VpeDependencyMap dependencyMap) {
+// build(taglibElement, dependencyMap);
+// }
+//
+// private void build(Element taglibElement, VpeDependencyMap dependencyMap) {
+// dependencyMap.setCreator(this, VpeExpressionBuilder.attrSignature(ATTR_URI, true));
+// dependencyMap.setCreator(this, VpeExpressionBuilder.attrSignature(ATTR_PREFIX, true));
+// }
+//
+// public VpeCreatorInfo create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument, nsIDOMElement visualElement, Map visualNodeMap) {
+// setTaglib(pageContext, (Element)sourceNode);
+// return null;
+// }
+//
+// public void setAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name, String value) {
+//// setTaglib(pageContext, sourceElement);
+// }
+//
+// public void removeAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name) {
+//// setTaglib(pageContext, sourceElement);
+// }
+//
+// public void removeElement(VpePageContext pageContext, Element sourceElement, Map visualNodeMap) {
+//// pageContext.setTaglib(sourceElement.hashCode(), null, null, false);
+// }
+//
+// private void setTaglib(VpePageContext pageContext, Element sourceElement) {
+//// String uri = sourceElement.getAttribute(ATTR_URI);
+//// String prefix = sourceElement.getAttribute(ATTR_PREFIX);
+//// pageContext.setTaglib(sourceElement.hashCode(), uri, prefix, false);
+// }
}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -21,10 +21,17 @@
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
import org.eclipse.wst.xml.core.internal.document.ElementImpl;
import org.jboss.tools.common.xml.XMLUtilities;
+import org.jboss.tools.jst.web.tld.TaglibData;
import org.jboss.tools.vpe.VpePlugin;
import org.jboss.tools.vpe.editor.context.VpePageContext;
+import org.jboss.tools.vpe.editor.util.XmlUtil;
import org.osgi.framework.Bundle;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -155,7 +162,11 @@
private static VpeTemplateManager instance = null;
private static Object monitor = new Object();
+ /**
+ * Contains Mapping from URI and namespace
+ */
private Map<String,String> templateTaglibs = new HashMap<String,String>();
+
private Map<String,VpeTemplateSet> caseSensitiveTags = new HashMap<String,VpeTemplateSet>();
private Map<String,VpeTemplateSet> ignoreSensitiveTags = new HashMap<String,VpeTemplateSet>();
private VpeTemplate defTemplate;
@@ -172,9 +183,6 @@
*/
private static final String NAMESPACE_IDENTIFIER_ATTRIBUTE="namespaceIdentifier";
- static {
-// withoutWhitespaceContainer.
- }
private VpeTemplateManager() {
}
@@ -218,39 +226,57 @@
}
return null;
}
-
+
private String getTemplateName(VpePageContext pageContext, Node sourceNode) {
+
String sourcePrefix = sourceNode.getPrefix();
+
if (sourcePrefix == null || ((ElementImpl)sourceNode).isJSPTag() || "jsp".equals(sourcePrefix)) {
+
return sourceNode.getNodeName();
}
- String templatePrefix = pageContext.getTemplateTaglibPrefix(sourcePrefix);
- if (templatePrefix != null) {
- return templatePrefix + ":" + sourceNode.getLocalName();
+
+ TLDCMDocumentManager tldcmDocumentManager= TaglibController.getTLDCMDocumentManager(pageContext.getSourceBuilder().getStructuredTextViewer().getDocument());
+
+ //we are editing jsp page added by Max Areshkau JBIDE-788
+ if(tldcmDocumentManager!=null) {
+ List<TaglibTracker> taglibs_JSP = tldcmDocumentManager.getTaglibTrackers();
+ for (TaglibTracker taglibTracker : taglibs_JSP) {
+ if(sourcePrefix.equals(taglibTracker.getPrefix())) {
+ String sourceNodeUri = taglibTracker.getURI();
+ String templatePrefix = getTemplateTaglibPrefix(sourceNodeUri);
+ if(templatePrefix != null) {
+ return templatePrefix+":"+sourceNode.getLocalName();
+ } else {
+ return null;
+ }
+ }
+ }
+ }
+
+
+ List<TaglibData> taglibs = XmlUtil.processNode(sourceNode);
+
+ TaglibData sourceNodeTaglib = XmlUtil.getTaglibForPrefix(sourcePrefix, taglibs);
+
+ if(sourceNodeTaglib == null) {
+
+ return null;
}
+
+ String sourceNodeUri = sourceNodeTaglib.getUri();
+
+
+ String templateTaglibPrefix = getTemplateTaglibPrefix(sourceNodeUri);
+
+ if(templateTaglibPrefix != null) {
+
+ return templateTaglibPrefix+":"+sourceNode.getLocalName();
+ }
+
return null;
}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-// public VpeTemplateInfo createVisualCommentInfo(VpePageContext pageContext, Comment sourceComment, nsIDOMDocument visualDocument, nsIDOMElement visualParent) {
-// VpeVisualElementInfo info = new VpeVisualElementInfo();
-// VpeTemplate template = _getTemplate(pageContext, sourceComment, info);
-// if (template == null || template.getType() != VpeHtmlTemplate.TYPE_COMMENT) {
-// return null;
-// }
-// Map visualNodeMap = new HashMap();
-// VpeCreatorInfo creatorInfo = template.createVisualComment(pageContext, sourceComment, visualDocument, visualParent, visualNodeMap);
-// info.setTemplate(template);
-// info.setVisualNodeMap(visualNodeMap);
-// return new VpeTemplateInfo(info, creatorInfo);
-// }
-
public String getTemplateTaglibPrefix(String sourceUri) {
return (String)templateTaglibs.get(sourceUri);
}
@@ -299,7 +325,8 @@
setTagElement((Element)node, confElement);
} else if (TAG_TEMPLATE.equals(node.getNodeName())) {
setDefTemplate(createTemplate((Element)node,confElement, true));
- } else if (TAG_TEMPLATE_TAGLIB.equals(node.getNodeName())) {
+ }
+ else if (TAG_TEMPLATE_TAGLIB.equals(node.getNodeName())) {
setTemplateTaglib((Element)node);
}
}
@@ -357,6 +384,10 @@
}
}
+ /**
+ * Register templates taglibs from templates files
+ * @param templateTaglibElement
+ */
private void setTemplateTaglib(Element templateTaglibElement) {
String uri = templateTaglibElement.getAttribute(ATTR_DIRECTIVE_TAGLIB_URI);
String pefix = templateTaglibElement.getAttribute(ATTR_DIRECTIVE_TAGLIB_PREFIX);
@@ -367,42 +398,6 @@
}
}
-// private VpeTemplate _getTemplate(VpePageContext pageContext, Node sourceNode, VpeVisualElementInfo info) {
-// VpeTemplate template = _getTemplateImpl(pageContext, sourceNode, info);
-// if (template != null) {
-// return template;
-// } else {
-// return defTemplate;
-// }
-// }
-
-// private VpeTemplate _getTemplateImpl(VpePageContext pageContext, Node sourceNode, VpeVisualElementInfo info) {
-// String name = getTemplateName(pageContext, sourceNode);
-// if (name == null) {
-// return null;
-// }
-// VpeTemplateSet set = (VpeTemplateSet)caseSensitiveTags.get(name);
-// if (set != null) {
-// return set._getTemplate(pageContext, sourceNode, info, true);
-// }
-// set = (VpeTemplateSet)ignoreSensitiveTags.get(name.toLowerCase());
-// if (set != null) {
-// return set._getTemplate(pageContext, sourceNode, info, false);
-// }
-// return null;
-// }
-//
-// public VpeVisualElementInfo pseudoVisualElementInfo(VpePageContext pageContext, Element sourceElement, nsIDOMElement visualElement) {
-// VpeVisualElementInfo info = new VpeVisualElementInfo();
-// VpeTemplate template = _getTemplate(pageContext, sourceElement, info);
-// Map visualNodeMap = new HashMap();
-// template.pseudoVisualElement(pageContext, sourceElement, visualElement, visualNodeMap);
-// info.setTemplate(template);
-// info.setNode(visualElement);
-// info.setVisualNodeMap(visualNodeMap);
-// return info;
-// }
-
public void setAnyTemplate(VpeAnyData data) {
String elementName = data.getName();
boolean caseSensitive = data.isCaseSensitive();
@@ -460,7 +455,7 @@
reload();
}
- private Element appendTaglib(Set prefixSet, Document document, Element root, VpeAnyData data) {
+ private Element appendTaglib(Set<?> prefixSet, Document document, Element root, VpeAnyData data) {
if (data.getPrefix() != null && data.getUri() != null &&
data.getPrefix().length() > 0 && data.getUri().length() > 0 &&
!prefixSet.contains(data.getPrefix())) {
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSet.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSet.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSet.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -19,7 +19,7 @@
import org.jboss.tools.vpe.editor.context.VpePageContext;
public class VpeTemplateSet {
- private List templates = new ArrayList();
+ private List<VpeTemplateSet> templates = new ArrayList<VpeTemplateSet>();
private VpeTemplate defTemplate;
VpeTemplateSet(){
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeXmlnsCreator.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeXmlnsCreator.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeXmlnsCreator.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -23,45 +23,46 @@
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
-public class VpeXmlnsCreator extends VpeAbstractCreator {
- private static final String ATTR_XMLNS = "xmlns";
-
- VpeXmlnsCreator(VpeDependencyMap dependencyMap) {
- build(dependencyMap);
- }
-
- private void build(VpeDependencyMap dependencyMap) {
- if (dependencyMap != null) {
- dependencyMap.setCreator(this, VpeExpressionBuilder.SIGNATURE_ANY_ATTR);
- }
- }
+public class VpeXmlnsCreator //extends VpeAbstractCreator
+{
+// private static final String ATTR_XMLNS = "xmlns";
+//
+// VpeXmlnsCreator(VpeDependencyMap dependencyMap) {
+// build(dependencyMap);
+// }
+//
+// private void build(VpeDependencyMap dependencyMap) {
+// if (dependencyMap != null) {
+// dependencyMap.setCreator(this, VpeExpressionBuilder.SIGNATURE_ANY_ATTR);
+// }
+// }
- public VpeCreatorInfo create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument, nsIDOMElement visualElement, Map visualNodeMap) {
- NamedNodeMap attrs = ((Element)sourceNode).getAttributes();
- if (attrs != null) {
- for (int i = 0; i < attrs.getLength(); i++) {
- addTaglib(pageContext, (Element)sourceNode, visualNodeMap, attrs.item(i).getNodeName());
- }
- }
- return null;
- }
+// public VpeCreatorInfo create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument, nsIDOMElement visualElement, Map visualNodeMap) {
+// NamedNodeMap attrs = ((Element)sourceNode).getAttributes();
+// if (attrs != null) {
+// for (int i = 0; i < attrs.getLength(); i++) {
+// addTaglib(pageContext, (Element)sourceNode, visualNodeMap, attrs.item(i).getNodeName());
+// }
+// }
+// return null;
+// }
- public void setAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name, String value) {
- addTaglib(pageContext, sourceElement, visualNodeMap, name);
- }
+// public void setAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name, String value) {
+// addTaglib(pageContext, sourceElement, visualNodeMap, name);
+// }
- public void removeAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name) {
- Object id = visualNodeMap.get(name);
- if (id != null) {
- pageContext.setTaglib(((Integer)id).intValue(), null, null, true);
- }
- }
+// public void removeAttribute(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String name) {
+// Object id = visualNodeMap.get(name);
+// if (id != null) {
+//// pageContext.setTaglib(((Integer)id).intValue(), null, null, true);
+// }
+// }
- private void addTaglib(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String attrName) {
- Attr attr = sourceElement.getAttributeNode(attrName);
- if (ATTR_XMLNS.equals(attr.getPrefix())) {
- visualNodeMap.put(attr.getNodeName(), Integer.valueOf(attr.hashCode()));
- pageContext.setTaglib(attr.hashCode(), attr.getNodeValue(), attr.getLocalName(), true);
- }
- }
+// private void addTaglib(VpePageContext pageContext, Element sourceElement, Map visualNodeMap, String attrName) {
+// Attr attr = sourceElement.getAttributeNode(attrName);
+// if (ATTR_XMLNS.equals(attr.getPrefix())) {
+// visualNodeMap.put(attr.getNodeName(), Integer.valueOf(attr.hashCode()));
+//// pageContext.setTaglib(attr.hashCode(), attr.getNodeValue(), attr.getLocalName(), true);
+// }
+// }
}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/XmlUtil.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/XmlUtil.java 2008-02-07 13:37:02 UTC (rev 6154)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/XmlUtil.java 2008-02-07 13:49:32 UTC (rev 6155)
@@ -11,13 +11,18 @@
package org.jboss.tools.vpe.editor.util;
import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import org.jboss.tools.jst.web.tld.TaglibData;
import org.jboss.tools.vpe.VpePlugin;
+import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
@@ -58,4 +63,95 @@
}
}
}
+
+ /**
+ * Returns List of taglibs which are available for current node.
+ *
+ * @param node
+ * @return
+ */
+ public static List<TaglibData> processNode(Node node) {
+
+ List<TaglibData> taglibs = new ArrayList<TaglibData>();
+
+ if (node == null) {
+
+ return taglibs;
+ }
+
+ Node currentNode = node;
+ do {
+ NamedNodeMap attribList = currentNode.getAttributes();
+ if (null != attribList) {
+ for (int i = 0; i < attribList.getLength(); i++) {
+ Node tmp = attribList.item(i);
+ processAttribute(taglibs,(Attr)tmp, false);
+ }
+ }
+ currentNode = currentNode.getParentNode();
+
+ } while(currentNode!=null);
+
+ return taglibs;
+ }
+ /**
+ * Processes taglib attribute
+ * @param taglibs
+ * @param attr
+ * @param bScopePrefix
+ */
+ private static void processAttribute(List<TaglibData> taglibs, Attr attr, boolean bScopePrefix) {
+
+ String startStr = "xmlns:";
+ String name = attr.getName();
+ if (!name.startsWith(startStr)) {
+ return;
+ }
+ name = name.substring(startStr.length());
+ addTaglib(taglibs , attr.getValue(), name, true, bScopePrefix);
+ return;
+ }
+
+ /**
+ * Adds taglib to current taglibs
+ * @param taglibs
+ * @param newUri
+ * @param newPrefix
+ * @param ns
+ * @param bScopePrefix
+ */
+ private static void addTaglib(List<TaglibData> taglibs, String newUri, String newPrefix, boolean ns, boolean bScopePrefix) {
+ boolean bHasSame = false;
+ for (int i = 0; i < taglibs.size(); i++) {
+ TaglibData taglib = (TaglibData)taglibs.get(i);
+ if (bScopePrefix && newPrefix.equals(taglib.getPrefix())) {
+ return;
+ }
+ if (newUri.equals(taglib.getUri()) && newPrefix.equals(taglib.getPrefix()) && ns == taglib.isNs()) {
+ bHasSame = true;
+ break;
+ }
+ }
+ if (!bHasSame) {
+ taglibs.add(new TaglibData(taglibs.size(), newUri, newPrefix, ns));
+ }
+ }
+ /**
+ * Returns Taglib data by prefix
+ *
+ * @param prefix
+ * @param taglibData
+ * @return
+ */
+ public static TaglibData getTaglibForPrefix(String prefix, List<TaglibData> taglibData){
+
+ for (TaglibData data : taglibData) {
+
+ if(data.getPrefix()!=null && data.getPrefix().equalsIgnoreCase(prefix)) {
+ return data;
+ }
+ }
+
+ return null;
+ }
}
16 years, 4 months
JBoss Tools SVN: r6154 - in branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor: util and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: dsakovich
Date: 2008-02-07 08:37:02 -0500 (Thu, 07 Feb 2008)
New Revision: 6154
Modified:
branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java
branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java
Log:
Code adjustment
Modified: branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java
===================================================================
--- branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java 2008-02-07 13:24:53 UTC (rev 6153)
+++ branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java 2008-02-07 13:37:02 UTC (rev 6154)
@@ -18,6 +18,7 @@
import org.w3c.dom.Node;
import org.jboss.tools.vpe.editor.template.textformating.FormatAttributeData;
+import org.jboss.tools.vpe.editor.util.HTML;
/**
* @author Igels
@@ -103,8 +104,7 @@
if (enabled) {
Node selectedNode = manager.getCurrentSelectedNode();
- String nodeName = selectedNode.getParentNode().getNodeName()
- .toLowerCase();
+ String nodeName = getNodeName(selectedNode).toLowerCase(); //
String text = (String) TAGS.get(nodeName);
if (text == null) {
this.getComboBlockFormat().select(0);
@@ -123,4 +123,20 @@
}
getComboBlockFormat().deselectAll();
}
+
+ /**
+ *
+ * @return node name (skip tags <u>, <b> and <i>)
+ */
+ private String getNodeName(Node node) {
+
+ String nodeName = "";
+ do {
+ nodeName = node.getNodeName();
+ node = node.getParentNode();
+ } while (nodeName.equalsIgnoreCase(HTML.TAG_U)
+ || nodeName.equalsIgnoreCase(HTML.TAG_B)
+ || nodeName.equalsIgnoreCase(HTML.TAG_I));
+ return nodeName;
+ }
}
\ No newline at end of file
Modified: branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java
===================================================================
--- branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java 2008-02-07 13:24:53 UTC (rev 6153)
+++ branches/jbosstools-2.0.x/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java 2008-02-07 13:37:02 UTC (rev 6154)
@@ -52,7 +52,10 @@
public static final String TAG_UL = "UL"; //$NON-NLS-1$
public static final String TAG_CODE = "CODE"; //$NON-NLS-1$
public static final String TAG_PRE = "PRE"; //$NON-NLS-1$
-
+ public static final String TAG_B = "B"; //$NON-NLS-1$
+ public static final String TAG_I = "I"; //$NON-NLS-1$
+ public static final String TAG_U = "U"; //$NON-NLS-1$
+
public static final String ATTR_ID = "ID"; //$NON-NLS-1$
public static final String ATTR_TYPE = "TYPE"; //$NON-NLS-1$
public static final String ATTR_TEXT = "TEXT"; //$NON-NLS-1$
@@ -69,4 +72,5 @@
public static final String ATTR_WIDTH = "WIDTH"; //$NON-NLS-1$
public static final String ATTR_HEIGHT = "HEIGHT"; //$NON-NLS-1$
public static final String ATTR_BORDER = "BORDER"; //$NON-NLS-1$
+
}
\ No newline at end of file
16 years, 4 months
JBoss Tools SVN: r6153 - in trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor: util and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: dsakovich
Date: 2008-02-07 08:24:53 -0500 (Thu, 07 Feb 2008)
New Revision: 6153
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java
Log:
Code adjustment
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java 2008-02-07 12:34:33 UTC (rev 6152)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/toolbar/format/BlockFormatController.java 2008-02-07 13:24:53 UTC (rev 6153)
@@ -18,6 +18,7 @@
import org.w3c.dom.Node;
import org.jboss.tools.vpe.editor.template.textformating.FormatAttributeData;
+import org.jboss.tools.vpe.editor.util.HTML;
/**
* @author Igels
@@ -103,8 +104,7 @@
if (enabled) {
Node selectedNode = manager.getCurrentSelectedNode();
- String nodeName = selectedNode.getParentNode().getNodeName()
- .toLowerCase();
+ String nodeName = getNodeName(selectedNode).toLowerCase(); //
String text = (String) TAGS.get(nodeName);
if (text == null) {
this.getComboBlockFormat().select(0);
@@ -123,4 +123,20 @@
}
getComboBlockFormat().deselectAll();
}
+
+ /**
+ *
+ * @return node name (skip tags <u>, <b> and <i>)
+ */
+ private String getNodeName(Node node) {
+
+ String nodeName = "";
+ do {
+ nodeName = node.getNodeName();
+ node = node.getParentNode();
+ } while (nodeName.equalsIgnoreCase(HTML.TAG_U)
+ || nodeName.equalsIgnoreCase(HTML.TAG_B)
+ || nodeName.equalsIgnoreCase(HTML.TAG_I));
+ return nodeName;
+ }
}
\ No newline at end of file
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java 2008-02-07 12:34:33 UTC (rev 6152)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/HTML.java 2008-02-07 13:24:53 UTC (rev 6153)
@@ -52,7 +52,10 @@
public static final String TAG_UL = "UL"; //$NON-NLS-1$
public static final String TAG_CODE = "CODE"; //$NON-NLS-1$
public static final String TAG_PRE = "PRE"; //$NON-NLS-1$
-
+ public static final String TAG_B = "B"; //$NON-NLS-1$
+ public static final String TAG_I = "I"; //$NON-NLS-1$
+ public static final String TAG_U = "U"; //$NON-NLS-1$
+
public static final String ATTR_ID = "ID"; //$NON-NLS-1$
public static final String ATTR_TYPE = "TYPE"; //$NON-NLS-1$
public static final String ATTR_TEXT = "TEXT"; //$NON-NLS-1$
@@ -69,4 +72,5 @@
public static final String ATTR_WIDTH = "WIDTH"; //$NON-NLS-1$
public static final String ATTR_HEIGHT = "HEIGHT"; //$NON-NLS-1$
public static final String ATTR_BORDER = "BORDER"; //$NON-NLS-1$
+
}
\ No newline at end of file
16 years, 4 months