Source Code : Bookmark Organizer

Java Is Open Source Programming Language You Can Download From Java and Java Libraries From http://www.oracle.com. Click Here to download
We provide this code related to title for you to solve your developing problem easily. Libraries which is import in this program you can download from http://www.oracle.com. Click Here or search from google with Libraries Name you get jar file related it

Bookmark Organizer

Bookmark Organizer

/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-4-27 16:53:36 by JACK $Id$
 *  
 ******************************************************************************/



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 java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.TransferData;
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;


/**
 * Represents a bookmark.
 *
 */
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, "java2s.gif");
  Image iconFolder = new Image(display, "java2s.gif");
  Image iconURL = new Image(display, "java2s.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) {
          // removes existing items.
          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();
        // Only a URL bookmark can be dragged.
        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) {
        // can only drops into to a folder
        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) { // folder.
          setStatus("Folder: " + item.getText());
        }
      }
    });

    shell.setSize(400, 300);
    shell.open();
    //textUser.forceFocus();

    loadBookmark(new File("icons/mybookmark.htm"), rootItem);

    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }

    display.dispose();
  }

  /**
   * Writes the bookmark(s) into the given buffered writer. 
   * @param writer
   * @param item
   * @throws IOException
   */
  private void saveBookmark(BufferedWriter writer, TreeItem item)
    throws IOException {
    if (item.getData() == null
      && item.getData(KEY_ADD_DATE) == null) { // root item.
      writer.write(
        "<!DOCTYPE NETSCAPE-Bookmark-file-1>
"
          + "<!-- This is an automatically generated file.
"
          + "It will be read and overwritten.
"
          + "Do Not Edit! -->
"
          + "<TITLE>Bookmarks</TITLE>
"
          + "<H1>Bookmarks</H1>
"
          + "<DL><p>
");

      TreeItem[] items = item.getItems();
      for (int i = 0; i < items.length; i++)
        saveBookmark(writer, items[i]);

      writer.write("</DL><p>
");
    } else if (item.getData() == null) { // folder
      writer.write(
        "	<DT><H3 FOLDED ADD_DATE=""
          + item.getData(KEY_ADD_DATE)
          + "">"
          + item.getText()
          + "</H3>
");
      writer.write("	<DL><p>
");

      TreeItem[] items = item.getItems();
      for (int i = 0; i < items.length; i++)
        saveBookmark(writer, items[i]);

      writer.write("	</DL><p>
");

    } else { // url.
      Bookmark bookmark = (Bookmark) item.getData();
      writer.write(
        "		<DT><A HREF=""
          + bookmark.href
          + "" ADD_DATE=""
          + bookmark.addDate
          + "" LAST_VISIT=""
          + bookmark.lastVisited
          + "" LAST_MODIFIED=" +"
          + bookmark.lastModified
          + "">"
          + bookmark.name
          + "</A>
");
    }
  }

  /**
   * Loads the bookmarks from the specified file. 
   * @param file
   * @param rootItem
   */
  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)) { // a folder.
          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)) { // a url
          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();
  }
}

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;
  }

  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
   */
  protected int[] getTypeIds() {
    return new int[] { BOOKMARK_TRANSFER_ID };
  }

  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
   */
  protected String[] getTypeNames() {
    return new String[] { BOOKMARK_TRANSFER_NAME };
  }

  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.swt.dnd.Transfer#javaToNative(java.lang.Object,
   *      org.eclipse.swt.dnd.TransferData)
   */
  protected void javaToNative(Object object, TransferData transferData) {
    if (object == null || !(object instanceof Bookmark))
      return;

    Bookmark bookmark = (Bookmark) object;

    if (isSupportedType(transferData)) {
      try {
        // Writes data to a byte array.
        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();
      }
    }
  }

  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.swt.dnd.Transfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
   */
  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;
    }
  }

}
           
       

Thank with us