The code is as follows:
Bookmarkorganizer.java
Copy Code code as follows:
Package swt_jface.demo11;
Import Java.io.BufferedReader;
Import Java.io.BufferedWriter;
Import Java.io.File;
Import java.io.FileNotFoundException;
Import Java.io.FileReader;
Import Java.io.FileWriter;
Import java.io.IOException;
Import Java.util.regex.Matcher;
Import Java.util.regex.Pattern;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.dnd.DND;
Import Org.eclipse.swt.dnd.DragSource;
Import Org.eclipse.swt.dnd.DragSourceAdapter;
Import org.eclipse.swt.dnd.DragSourceEvent;
Import Org.eclipse.swt.dnd.DropTarget;
Import Org.eclipse.swt.dnd.DropTargetAdapter;
Import org.eclipse.swt.dnd.DropTargetEvent;
Import Org.eclipse.swt.dnd.Transfer;
Import Org.eclipse.swt.events.SelectionAdapter;
Import org.eclipse.swt.events.SelectionEvent;
Import Org.eclipse.swt.graphics.Image;
Import Org.eclipse.swt.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.widgets.Display;
Import org.eclipse.swt.widgets.Event;
Import Org.eclipse.swt.widgets.FileDialog;
Import Org.eclipse.swt.widgets.Label;
Import Org.eclipse.swt.widgets.Listener;
Import Org.eclipse.swt.widgets.Shell;
Import Org.eclipse.swt.widgets.ToolBar;
Import Org.eclipse.swt.widgets.ToolItem;
Import Org.eclipse.swt.widgets.Tree;
Import Org.eclipse.swt.widgets.TreeItem;
Class Bookmark {
public String name;
public String href;
Public String adddate;
Public String lastvisited;
Public String lastmodified;
}
public class Bookmarkorganizer {
private static String Folderlineprefix = "<dt><h3 FOLDED";
private static String Urllineprefix = "<dt><a HREF";
private static Pattern Folderpattern = Pattern.compile ("\" (\\d+) \ > (. *) <);
private static Pattern Urlpattern = Pattern.compile (. *) \. *\ (. *) \ ". *\" (. *) \ ". *\" (. *) \ > (. *) <);
private static String key_add_date = "Add_date";
private static String Key_href = "HREF";
private static String key_last_visited = "last_visited";
private static String key_last_modified = "last_modified";
Display display = new display ();
Shell shell = new shell (display);
Tree tree;
Label label;
TreeItem Rootitem;
Image iconroot = new Image (Display, "c:/icons/icon.gif");
Image iconfolder = new Image (Display, "c:/icons/folder.gif");
Image iconurl = new Image (Display, "c:/icons/file.gif");
TreeItem Dragsourceitem;
Public Bookmarkorganizer () {
Shell.settext ("Bookmark organizer");
Shell.setlayout (New GridLayout (1, true));
ToolBar ToolBar = new ToolBar (Shell, SWT. FLAT);
Toolitem Itemopen = new Toolitem (ToolBar, SWT. PUSH);
Itemopen.settext ("Load");
Itemopen.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
FileDialog dialog = new FileDialog (Shell, SWT. OPEN);
String file = Dialog.open ();
if (file!= null) {
treeitem[] items = Rootitem.getitems ();
for (int i = 0; i < items.length; i++)
Items[i].dispose ();
Loadbookmark (new file (file), Rootitem);
SetStatus ("Bookmarks loaded successfully");
}
}
});
Toolitem itemsave = new Toolitem (ToolBar, SWT. PUSH);
Itemsave.settext ("Save as");
Itemsave.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
FileDialog dialog = new FileDialog (Shell, SWT. SAVE);
String file = Dialog.open ();
if (file!= null) {
try {
BufferedWriter writer =
New BufferedWriter (new FileWriter (file));
Savebookmark (writer, rootitem);
Writer.close ();
SetStatus (
"Bookmarks saved successfully to file:" + file);
catch (IOException e) {
E.printstacktrace ();
}
}
}
});
Tree = new Tree (shell, SWT. BORDER);
Tree.setlayoutdata (New Griddata (Griddata.fill_both));
Rootitem = new TreeItem (tree, SWT. NULL);
Rootitem.settext ("BOOKMARKS");
Rootitem.setimage (Iconroot);
Label = new label (Shell, SWT. BORDER);
Label.setlayoutdata (New Griddata (griddata.fill_horizontal));
Final DragSource DragSource =
New DragSource (tree, DND. Drop_move | Dnd. drop_copy | Dnd. Drop_link);
Dragsource.settransfer (
New transfer[] {bookmarktransfer.getinstance ()});
Dragsource.adddraglistener (New Dragsourceadapter () {
public void DragStart (Dragsourceevent event) {
treeitem[] selection = Tree.getselection ();
if (selection.length > 0 && selection[0].getdata ()!= null) {
Event.doit = true;
Dragsourceitem = selection[0];
} else {
Event.doit = false;
}
};
public void Dragsetdata (Dragsourceevent event) {
if (bookmarktransfer
. getinstance ()
. Issupportedtype (Event.datatype))
Event.data = Dragsourceitem.getdata ();
}
public void dragfinished (Dragsourceevent event) {
if (Event.detail = = DND. Drop_move)
Dragsourceitem.dispose ();
Dragsourceitem = null;
}
});
Final DropTarget DropTarget =
New DropTarget (tree, DND. Drop_move | Dnd. drop_copy | Dnd. Drop_link);
Droptarget.settransfer (
New transfer[] {bookmarktransfer.getinstance ()});
Droptarget.adddroplistener (New Droptargetadapter () {
public void DragOver (Droptargetevent event) {
Event.feedback =
Dnd. Feedback_expand
| Dnd. Feedback_scroll
| Dnd. Feedback_select;
}
public void Dropaccept (Droptargetevent event) {
if (Event.item = null
|| ((TreeItem) event.item). GetData ()!= null)
Event.detail = DND. Drop_none;
}
public void Drop (Droptargetevent event) {
try {
if (Event.data = = null) {
Event.detail = DND. Drop_none;
Return
}
TreeItem item = new TreeItem (TreeItem) Event.item, SWT. NULL);
Bookmark bookmark = (bookmark) event.data;
Item.settext (Bookmark.name);
Item.setimage (Iconurl);
Item.setdata (bookmark);
catch (RuntimeException e) {
E.printstacktrace ();
}
}
});
Tree.addselectionlistener (New Selectionadapter () {
public void widgetselected (Selectionevent e) {
TreeItem item = (TreeItem) e.item;
Bookmark bookmark = (bookmark) item.getdata ();
if (bookmark!= null) {
SetStatus (BOOKMARK.HREF);
else if (Item.getdata (key_add_date)!= null) {
SetStatus ("folder:" + Item.gettext ());
}
}
});
Shell.setsize (400, 300);
Shell.open ();
Loadbookmark (New File ("c:/icons/mybookmark.htm"), Rootitem);
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
private void Savebookmark (bufferedwriter writer, TreeItem item)
Throws IOException {
if (item.getdata () = null
&& item.getdata (key_add_date) = = null) {
Writer.write (
"<! DOCTYPE netscape-bookmark-file-1>\n "
+ "<!--this are an automatically generated file.\n"
+ "It'll be read and overwritten.\n"
+ ' Do not edit! -->\n "
+ "<title>bookmarks</title>\n"
+ "<h1>bookmarks</h1>\n"
+ "<dl><p>\n");
treeitem[] items = Item.getitems ();
for (int i = 0; i < items.length; i++)
Savebookmark (writer, items[i]);
Writer.write ("</dl><p>\n");
else if (item.getdata () = null) {
Writer.write (
"\t<dt><h3 FOLDED add_date=\" "
+ Item.getdata (key_add_date)
+ ">"
+ Item.gettext ()
+ "</h3>\n");
Writer.write ("\t<dl><p>\n");
treeitem[] items = Item.getitems ();
for (int i = 0; i < items.length; i++)
Savebookmark (writer, items[i]);
Writer.write ("\t</dl><p>\n");
} else {
Bookmark bookmark = (bookmark) item.getdata ();
Writer.write (
"\t\t<dt><a href=" \ "href=" \ "" "
+ Bookmark.href
+ "\" Add_date=\ ""
+ bookmark.adddate
+ "\" Last_visit=\ ""
+ bookmark.lastvisited
+ "\" last_modified=\ "+"
+ bookmark.lastmodified
+ ">"
+ Bookmark.name
+ "</a>\n");
}
}
private void Loadbookmark (file file, TreeItem Rootitem) {
TreeItem parent = Rootitem;
try {
BufferedReader reader = new BufferedReader (new FileReader (file));
String line = null;
while (line = Reader.readline ())!= null) {
line = Line.trim ();
if (Line.startswith (Folderlineprefix)) {
Matcher Matcher = Folderpattern.matcher (line);
if (Matcher.find ()) {
String adddate = Matcher.group (1);
String name = Matcher.group (2);
TreeItem item = new TreeItem (parent, SWT. NULL);
Item.settext (name);
Item.setdata (Key_add_date, adddate);
Item.setimage (Iconfolder);
parent = Item;
}
else if (Line.startswith (Urllineprefix)) {
Matcher Matcher = Urlpattern.matcher (line);
if (Matcher.find ()) {
Bookmark bookmark = new Bookmark ();
Bookmark.href = Matcher.group (1);
Bookmark.adddate = Matcher.group (2);
bookmark.lastvisited = Matcher.group (3);
bookmark.lastmodified = Matcher.group (4);
Bookmark.name = Matcher.group (5);
TreeItem item = new TreeItem (parent, SWT. NULL);
Item.settext (Bookmark.name);
Item.setdata (bookmark);
Item.setimage (Iconurl);
}
else if (line.equals ("</DL><p>")) {//folder Boundry.
Parent = Parent.getparentitem ();
}
}
catch (FileNotFoundException e) {
E.printstacktrace ();
catch (IOException e) {
E.printstacktrace ();
}
}
private void SetStatus (String message) {
Label.settext (message);
}
public static void Main (string[] args) {
New Bookmarkorganizer ();
}
}
Bookmarktransfer.java
Copy Code code as follows:
Package swt_jface.demo11;
Import Java.io.ByteArrayInputStream;
Import Java.io.ByteArrayOutputStream;
Import Java.io.DataInputStream;
Import Java.io.DataOutputStream;
Import java.io.IOException;
Import Org.eclipse.swt.dnd.ByteArrayTransfer;
Import Org.eclipse.swt.dnd.TransferData;
public class Bookmarktransfer extends Bytearraytransfer {
private static final String Bookmark_transfer_name = "BOOKMARK";
private static final int bookmark_transfer_id =
Registertype (Bookmark_transfer_name);
Private static final Bookmarktransfer instance = new Bookmarktransfer ();
public static Bookmarktransfer getinstance () {
return instance;
}
Protected int[] Gettypeids () {
return new int[] {bookmark_transfer_id};
}
Protected string[] Gettypenames () {
return new string[] {bookmark_transfer_name};
}
protected void Javatonative (Object object, TransferData transferdata) {
if (object = NULL | |!) ( Object instanceof Bookmark) return;
Bookmark bookmark = (bookmark) object;
if (Issupportedtype (TransferData)) {
try {
Bytearrayoutputstream stream = new Bytearrayoutputstream ();
DataOutputStream out = new DataOutputStream (stream);
Out.writeutf (Bookmark.name);
Out.writeutf (BOOKMARK.HREF);
Out.writeutf (bookmark.adddate);
Out.writeutf (bookmark.lastvisited);
Out.writeutf (bookmark.lastmodified);
Out.close ();
Super.javatonative (Stream.tobytearray (), transferdata);
catch (IOException e) {
E.printstacktrace ();
}
}
}
Protected Object Nativetojava (TransferData transferdata) {
if (Issupportedtype (TransferData)) {
Byte[] Raw = (byte[]) Super.nativetojava (transferdata);
if (raw = = null) return null;
Bookmark bookmark = new Bookmark ();
try {
Bytearrayinputstream stream = new Bytearrayinputstream (raw);
DataInputStream in = new DataInputStream (stream);
Bookmark.name = In.readutf ();
Bookmark.href = In.readutf ();
Bookmark.adddate = In.readutf ();
bookmark.lastvisited = In.readutf ();
bookmark.lastmodified = In.readutf ();
In.close ();
catch (IOException e) {
E.printstacktrace ();
return null;
}
return bookmark;
} else {
return null;
}
}
}
Mybookmark.htm