Package com.dmissoh.biologic.view

Source Code of com.dmissoh.biologic.view.BackUpLogView$ViewContentProvider

package com.dmissoh.biologic.view;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.dmissoh.biologic.editor.SequenceEditor;
import com.dmissoh.biologic.editor.SequenceEditorInput;
import com.dmissoh.biologic.internal.PluginService;
import com.dmissoh.biologic.listeners.ISaveListener;
import com.dmissoh.biologic.models.Sequence;
import com.dmissoh.biologic.models.SequenceStoreObject;
import com.dmissoh.biologic.utils.ExportUtils;
import com.dmissoh.biologic.utils.TimeUtils;

public class BackUpLogView extends ViewPart implements ISaveListener {

  public static final String ID = BackUpLogView.class.getName();
  private TableViewer viewer;
  private IPartListener partListener;

  public BackUpLogView() {
    ExportUtils.getInstance().addSaveListener(this);
    partListener = new IPartListener() {

      public void partActivated(IWorkbenchPart part) {
        synchronizeSelection(part);
      }

      public void partBroughtToTop(IWorkbenchPart part) {
        // TODO Auto-generated method stub
      }

      public void partClosed(IWorkbenchPart part) {
        // TODO Auto-generated method stub
      }

      public void partDeactivated(IWorkbenchPart part) {
        // TODO Auto-generated method stub
      }

      public void partOpened(IWorkbenchPart part) {
        synchronizeSelection(part);
      }
    };
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
        .addPartListener(partListener);
  }

  private void synchronizeSelection(IWorkbenchPart part) {
    if (part instanceof SequenceEditor) {
      SequenceEditor editor = (SequenceEditor) part;
      Sequence sequence = editor.getInputAsSequence();
      long startTime = sequence.getStartTime();
      String logName = "log_" + startTime + ".log";
      viewer.setSelection(new StructuredSelection(logName));
    }
  }

  class ViewContentProvider implements IStructuredContentProvider {
    public Object[] getElements(Object inputElement) {
      if (inputElement instanceof String[]) {
        return (Object[]) inputElement;
      }
      return new Object[0];
    }

    public void dispose() {
      // TODO Auto-generated method stub
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
      // TODO Auto-generated method stub
    }

  }

  @Override
  public void dispose() {
    ExportUtils.getInstance().removeSaveListener(this);
    IWorkbenchPage page = PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getActivePage();
    if (page != null) {
      page.removePartListener(partListener);
    }
    super.dispose();
  }

  class ViewLabelProvider extends LabelProvider implements
      ITableLabelProvider {

    public Image getColumnImage(Object element, int columnIndex) {
      return PluginService.getInstance().getImage("icons/backuplog.gif");
    }

    public String getColumnText(Object element, int columnIndex) {
      if (element instanceof String) {
        String logName = element.toString();

        Sequence sequence = restoreSequenceFromLog(getLogPathForName(logName));

        if(sequence != null){
          return sequence.getDescription();
        }

        int indexOfPrefix = logName.indexOf("log_") + 4;
        int indexOfSuffix = logName.indexOf(".log");
        String timeStr = logName
            .substring(indexOfPrefix, indexOfSuffix);
        long time = Long.valueOf(timeStr);
        return TimeUtils.formatToDateTime(time);
      }
      return "";
    }
  }

  public void createPartControl(Composite parent) {
    viewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
        | SWT.V_SCROLL | SWT.BORDER);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setInput(getInput());

    viewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
        String logFolderPath = ExportUtils.getInstance()
            .getLogFolderPath();
        String log = ((IStructuredSelection) event.getSelection())
            .getFirstElement().toString();
        String logPath = logFolderPath + File.separator + log;
        try {
          Sequence sequence = restoreSequenceFromLog(logPath);
          SequenceEditorInput input = new SequenceEditorInput(true,
              sequence.isLive());
          input.setSequence(sequence);
          PlatformUI.getWorkbench().getActiveWorkbenchWindow()
              .getActivePage().openEditor(input,
                  SequenceEditor.class.getName());
        } catch (PartInitException e) {
          PluginService.getInstance().handleException(e);
        }
      }

    });
  }

  private String getLogPathForName(String logName) {
    String logFolderPath = ExportUtils.getInstance().getLogFolderPath();
    return logFolderPath + File.separator + logName;
  }

  private Sequence restoreSequenceFromLog(String logPath) {
    File logFile = new File(logPath);
    Sequence sequence = null;
    if (logFile.exists()) {
      SequenceStoreObject sto = ExportUtils.getInstance()
          .restore(logPath);
      sequence = ExportUtils.getInstance().convertStoredToBusiness(sto);
    }
    return sequence;
  }

  private String[] getInput() {
    String logFolderPath = ExportUtils.getInstance().getLogFolderPath();
    File logFolder = new File(logFolderPath);
    if (logFolder.exists()) {
      String[] logs = logFolder.list(new FilenameFilter() {
        public boolean accept(File dir, String name) {
          if (name.indexOf(".log") > -1) {
            return true;
          }
          return false;
        }
      });
      List<String> list = Arrays.asList(logs);
      Collections.reverse(list);
      return list.toArray(new String[list.size()]);
    }
    return null;
  }

  public void setFocus() {
    viewer.getControl().setFocus();
  }

  public void handleSave() {
    viewer.setInput(getInput());
  }
}
TOP

Related Classes of com.dmissoh.biologic.view.BackUpLogView$ViewContentProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.