001: /*
002: * Copyright (c) 2000, Jacob Smullyan.
003: *
004: * This is part of SkunkDAV, a WebDAV client. See http://skunkdav.sourceforge.net/
005: * for the latest version.
006: *
007: * SkunkDAV is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License as published
009: * by the Free Software Foundation; either version 2, or (at your option)
010: * any later version.
011: *
012: * SkunkDAV is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with SkunkDAV; see the file COPYING. If not, write to the Free
019: * Software Foundation, 59 Temple Place - Suite 330, Boston, MA
020: * 02111-1307, USA.
021: */
022:
023: package org.skunk.dav.client.gui.action;
024:
025: import java.awt.Component;
026: import java.awt.Window;
027: import java.awt.event.ActionEvent;
028: import java.util.Iterator;
029: import javax.swing.AbstractAction;
030: import javax.swing.JOptionPane;
031: import javax.swing.SwingUtilities;
032: import org.skunk.dav.client.DAVFile;
033: import org.skunk.dav.client.gui.Buffer;
034: import org.skunk.dav.client.gui.DAVTreeNode;
035: import org.skunk.dav.client.gui.Explorer;
036: import org.skunk.dav.client.gui.ExplorerApp;
037: import org.skunk.dav.client.gui.ResourceManager;
038: import org.skunk.dav.client.gui.ServerData;
039: import org.skunk.dav.client.gui.StateMonitor;
040: import org.skunk.dav.client.gui.StateProperties;
041: import org.skunk.dav.client.gui.View;
042: import org.skunk.dav.client.gui.editor.DAVEditor;
043: import org.skunk.trace.Debug;
044:
045: /**
046: * an Action that closes a buffer.
047: * @author Jacob Smullyan
048: */
049: public class CloseBufferAction extends AbstractAction {
050: private Buffer buffer;
051: private boolean noprompt = false;
052:
053: /**
054: * @param buffer the buffer to be closed
055: */
056: public CloseBufferAction(Buffer buffer) {
057: this .buffer = buffer;
058: }
059:
060: /**
061: * @param buffer the buffer to be closed
062: * @param noprompt whether or not to suppress dialog messages to the client
063: */
064: public CloseBufferAction(Buffer buffer, boolean noprompt) {
065: this (buffer);
066: this .noprompt = noprompt;
067: }
068:
069: /**
070: * constructor that closes the current buffer
071: */
072: public CloseBufferAction() {
073: this (null);
074: }
075:
076: public void actionPerformed(ActionEvent ae) {
077: Buffer localBuffer = (buffer == null) ? ExplorerApp
078: .getAppContext().getCurrentView().getFocussedBuffer()
079: : buffer;
080: Debug.trace(this , Debug.DP3, "buffer to be closed is "
081: + localBuffer);
082: if (localBuffer != null) {
083: if (localBuffer instanceof DAVEditor) {
084: DAVEditor editor = (DAVEditor) localBuffer;
085: if (editor.isDirty()) {
086: String title = ResourceManager
087: .getMessage(ResourceManager.CLOSE_BUFFER_KEY);
088: String message = ResourceManager.getMessage(
089: ResourceManager.CLOSE_DIRTY_BUFFER_WARNING,
090: new Object[] { localBuffer.getName() });
091: if (!noprompt) {
092: int option = JOptionPane.showConfirmDialog(
093: localBuffer.getComponent(), message,
094: title, JOptionPane.OK_CANCEL_OPTION,
095: JOptionPane.WARNING_MESSAGE);
096: if (option == JOptionPane.CANCEL_OPTION)
097: return;
098: }
099: }
100: DAVFile file = editor.getDAVFile();
101: Explorer ex = ExplorerApp
102: .getExplorerForBuffer(localBuffer);
103: DAVTreeNode node = ex.getNodeForFile(file);
104: Debug.trace(this , Debug.DP5,
105: "explorer is {0}, node is {1}, file is {2}",
106: new Object[] { ex, node, file });
107: if (ex != null) {
108: if (file.isLocked()) {
109: if (file.isExclusiveLocked()) {
110: String lockOwner = file
111: .getExclusiveLockOwner();
112: ServerData sd = ex.getConnection(node);
113: String localLockOwner = sd.getOwner();
114: if (localLockOwner == null)
115: localLockOwner = sd.getUsername();
116: if (localLockOwner.equals(lockOwner))
117: ex.unlock(node, file);
118: }
119: }
120: }
121: }
122: View v = ExplorerApp.getViewForBuffer(localBuffer);
123: if (v != null)
124: v.undock(localBuffer);
125: StateMonitor.unregisterProperty(localBuffer, "DAVFile",
126: StateProperties.RELOAD);
127: }
128: }
129: }
130:
131: /* $Log: CloseBufferAction.java,v $
132: /* Revision 1.7 2000/12/19 22:06:15 smulloni
133: /* adding documentation.
134: /*
135: /* Revision 1.6 2000/12/19 19:22:22 smulloni
136: /* some tweaks: ExitAction now cleans up the app's buffers. The app now does
137: /* not resize every time a buffer is added or removed.
138: /*
139: /* Revision 1.5 2000/12/03 23:53:26 smulloni
140: /* added license and copyright preamble to java files.
141: /*
142: /* Revision 1.4 2000/11/23 04:37:34 smullyan
143: /* editor and explorer now synch their files using the StateMonitor, which has
144: /* been improved significantly
145: /*
146: /* Revision 1.3 2000/11/22 00:11:28 smullyan
147: /* editor now locks and unlocks, more or less appropriately.
148: /*
149: /* Revision 1.2 2000/11/20 23:30:22 smullyan
150: /* more editor integration work.
151: /*
152: /* Revision 1.1 2000/11/16 20:45:19 smullyan
153: /* the start of editor integration.
154: /* */
|