@Override
 public boolean isEnabled(final AbstractNode obj) {
   if (obj instanceof AbstractPackageNode) {
     return ((AbstractPackageNode) obj).getView().isEnabled();
   }
   return obj.isEnabled();
 }
 @Override
 public boolean isEnabled(AbstractNode obj) {
   if (obj instanceof FilePackage) {
     return ((FilePackage) obj).getView().isEnabled();
   }
   if (obj instanceof CrawledPackage) {
     return ((CrawledPackage) obj).getView().isEnabled();
   }
   return obj.isEnabled();
 }
 public static File getDownloadDirectory(AbstractNode node) {
   String directory = null;
   if (node instanceof DownloadLink) {
     FilePackage parent = ((DownloadLink) node).getFilePackage();
     if (parent != null) directory = parent.getDownloadDirectory();
   } else if (node instanceof FilePackage) {
     directory = ((FilePackage) node).getDownloadDirectory();
   } /* else if (node instanceof CrawledLink) {
         CrawledPackage parent = ((CrawledLink) node).getParentNode();
         if (parent != null) directory = parent.getDownloadFolder();
     } else if (node instanceof CrawledPackage) {
         directory = ((CrawledPackage) node).getDownloadFolder();
     }*/ else throw new WTFException("Unknown Type: " + node.getClass());
   return getDownloadDirectory(directory);
 }
  @Override
  protected void setStringValue(final String value, final AbstractNode object) {
    if (StringUtils.isEmpty(value) || object == null) {
      return;
    }
    File oldPath = LinkTreeUtils.getDownloadDirectory(object);
    File newPath = LinkTreeUtils.getDownloadDirectory(value, null, object);
    if (oldPath.equals(newPath)) {
      /* both paths are same, so nothing to do */
      return;
    }
    if (object instanceof CrawledPackage) {
      LinkCollector.getInstance()
          .getQueue()
          .add(
              new QueueAction<Object, RuntimeException>(
                  org.appwork.utils.event.queue.Queue.QueuePriority.HIGH) {
                @Override
                protected Object run() {
                  ((CrawledPackage) object).setDownloadFolder(value);
                  return null;
                }
              });
      return;
    } else if (object instanceof CrawledLink) {
      final CrawledPackage p = ((CrawledLink) object).getParentNode();
      try {
        Dialog.getInstance()
            .showConfirmDialog(
                Dialog.LOGIC_DONOTSHOW_BASED_ON_TITLE_ONLY | Dialog.STYLE_SHOW_DO_NOT_DISPLAY_AGAIN,
                _JDT.T.SetDownloadFolderAction_actionPerformed_(p.getName()),
                _JDT.T.SetDownloadFolderAction_msg(p.getName(), 1),
                null,
                _JDT.T.SetDownloadFolderAction_yes(),
                _JDT.T.SetDownloadFolderAction_no());
        LinkCollector.getInstance()
            .getQueue()
            .add(
                new QueueAction<Object, RuntimeException>(
                    org.appwork.utils.event.queue.Queue.QueuePriority.HIGH) {
                  @Override
                  protected Object run() {
                    p.setDownloadFolder(value);
                    return null;
                  }
                });
        return;
      } catch (DialogClosedException e) {
        return;
      } catch (DialogCanceledException e) {
        /* user clicked no */
      }

      final CrawledPackage pkg = new CrawledPackage();
      pkg.setExpanded(CFG_LINKCOLLECTOR.CFG.isPackageAutoExpanded());
      if (TYPE.NORMAL != p.getType()) {
        final String pkgName;
        if (object instanceof AbstractPackageNode) {
          pkgName =
              LinknameCleaner.cleanFileName(
                  object.getName(),
                  false,
                  true,
                  LinknameCleaner.EXTENSION_SETTINGS.REMOVE_KNOWN,
                  true);
        } else {
          pkgName =
              LinknameCleaner.cleanFileName(
                  object.getName(),
                  false,
                  true,
                  LinknameCleaner.EXTENSION_SETTINGS.REMOVE_ALL,
                  true);
        }
        pkg.setName(pkgName);
      } else {
        pkg.setName(p.getName());
      }
      pkg.setComment(p.getComment());
      pkg.setDownloadFolder(value);

      final java.util.List<CrawledLink> links = new ArrayList<CrawledLink>();
      links.add((CrawledLink) object);
      LinkCollector.getInstance()
          .getQueue()
          .add(
              new QueueAction<Object, RuntimeException>(
                  org.appwork.utils.event.queue.Queue.QueuePriority.HIGH) {

                @Override
                protected Object run() {
                  LinkCollector.getInstance().moveOrAddAt(pkg, links, -1);
                  return null;
                }
              });
    }
  }
 @Override
 public boolean isEnabled(AbstractNode obj) {
     return obj.isEnabled();
 }
 @Override
 protected Date getDate(AbstractNode node, Date date) {
   if (node.getCreated() <= 0) return null;
   date.setTime(node.getCreated());
   return date;
 }