001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.css.actions;
042:
043: import java.awt.datatransfer.StringSelection;
044: import java.awt.event.ActionEvent;
045: import java.net.*;
046: import javax.swing.text.JTextComponent;
047: import org.netbeans.editor.BaseAction;
048: import org.netbeans.editor.BaseDocument;
049: import org.netbeans.editor.Utilities;
050: import org.netbeans.modules.editor.NbEditorUtilities;
051:
052: import org.openide.*;
053: import org.openide.awt.StatusDisplayer;
054: import org.openide.loaders.DataObject;
055: import org.openide.nodes.Node;
056: import org.openide.util.*;
057: import org.openide.util.datatransfer.ExClipboard;
058: import org.openide.util.actions.*;
059: import org.openide.filesystems.*;
060:
061: import org.netbeans.modules.css.*;
062:
063: /**
064: * Action that put XML style processing instruction in clipboard.
065: * TODO add PI flavor.
066: *
067: * @author Petr Kuzel
068: */
069: public abstract class CopyStyleAction extends BaseAction {
070:
071: protected static final String comment = NbBundle.getMessage(
072: CopyStyleAction.class, "Style-Comment")
073: + "\n"; // NOI18N
074:
075: public CopyStyleAction(String name) {
076: super (name);
077: }
078:
079: public void actionPerformed(ActionEvent evt, JTextComponent target) {
080: BaseDocument bdoc = Utilities.getDocument(target);
081: if (bdoc == null) {
082: return; //no document?!?!
083: }
084: DataObject csso = NbEditorUtilities.getDataObject(bdoc);
085: if (csso == null) {
086: return; //document not backuped by DataObject
087: }
088:
089: String pi = createText(csso);
090: StringSelection ss = new StringSelection(pi);
091: ExClipboard clipboard = Lookup.getDefault().lookup(
092: ExClipboard.class);
093: clipboard.setContents(ss, null);
094: StatusDisplayer.getDefault().setStatusText(
095: NbBundle.getMessage(CheckStyleAction.class,
096: "MSG_Style_tag_in_clipboard")); // NOI18N
097:
098: }
099:
100: /** A method that creates particular clipboard text.
101: * @return text to be placed to clip board.
102: */
103: protected abstract String createText(DataObject dobj);
104:
105: /** Get help context for the action.
106: */
107: public HelpCtx getHelpCtx() {
108: return new HelpCtx(getClass());
109: }
110:
111: /** Converts CSS fileobject to its href that is valid during IDE runtime. */
112: protected String getHref(FileObject fo) {
113: URL u = URLMapper.findURL(fo, URLMapper.NETWORK);
114: if (u != null) {
115: return u.toExternalForm();
116: } else {
117: return fo.getPath();
118: }
119: }
120:
121: /** Produces XML PI text. */
122: public final static class XML extends CopyStyleAction {
123:
124: public static final String copyStyleAction = NbBundle
125: .getMessage(CopyStyleAction.class, "Copy-XML-Style");//NOI18N
126:
127: public XML() {
128: super (copyStyleAction);
129: putValue(SHORT_DESCRIPTION, copyStyleAction);
130: }
131:
132: protected String createText(DataObject csso) {
133: return comment
134: + "<?xml-stylesheet type=\"text/css\" href=\""
135: + this .getHref(csso.getPrimaryFile()) + "\" ?>"; // NOI18N
136: }
137:
138: }
139:
140: /** Produces HTML style text. */
141: public final static class HTML extends CopyStyleAction {
142:
143: public static final String copyStyleAction = NbBundle
144: .getMessage(CopyStyleAction.class, "Copy-HTML-Style");//NOI18N
145:
146: public HTML() {
147: super (copyStyleAction);
148: putValue(SHORT_DESCRIPTION, copyStyleAction);
149: }
150:
151: protected String createText(DataObject csso) {
152: return comment
153: + "<link rel=\"StyleSheet\" type=\"text/css\" href=\""
154: + this .getHref(csso.getPrimaryFile())
155: + "\" media=\"screen\" >"; // NOI18N
156: }
157:
158: }
159: }
|