package edu.usc.cssl.tacit.crawlers.supremecourt.ui; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; 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.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.HyperlinkSettings; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.part.ViewPart; import edu.uc.cssl.tacit.crawlers.supremecourt.services.SupremCrawlerFilter; import edu.uc.cssl.tacit.crawlers.supremecourt.services.SupremeCourtCrawler; import edu.usc.cssl.tacit.common.ui.CommonUiActivator; import edu.usc.cssl.tacit.common.ui.composite.from.TacitFormComposite; import edu.usc.cssl.tacit.common.ui.outputdata.OutputLayoutData; import edu.usc.cssl.tacit.common.ui.validation.OutputPathValidation; import edu.usc.cssl.tacit.common.ui.views.ConsoleView; import edu.usc.cssl.tacit.crawlers.supremecourt.ui.internal.ISupremeCrawlerUIConstants; import edu.usc.cssl.tacit.crawlers.supremecourt.ui.internal.SupremeCrawlerImageRegistry; public class SupremeCrawlerView extends ViewPart implements ISupremeCrawlerUIConstants { public static final String ID = "edu.usc.cssl.tacit.crawlers.supremecourt.ui.view1"; private ScrolledForm form; private FormToolkit toolkit; private Button downloadAudio; private Button truncateAudio; private Button termBtn; private Combo rangeCombo; private OutputLayoutData layoutData; private IToolBarManager mgr; protected Job job; @Override public Image getTitleImage() { return SupremeCrawlerImageRegistry.getImageIconFactory().getImage( IMAGE_CRAWL_TITLE); } /** * This is a callback that will allow us to create the viewer and initialize * it. */ @Override public void createPartControl(Composite parent) { toolkit = new FormToolkit(parent.getDisplay()); form = toolkit.createScrolledForm(parent); toolkit.decorateFormHeading(form.getForm()); toolkit.getHyperlinkGroup().setHyperlinkUnderlineMode( HyperlinkSettings.UNDERLINE_HOVER); form.setText("Supreme Court Crawler"); //$NON-NLS-1$ final IMessageManager mmng = form.getMessageManager(); GridLayoutFactory.fillDefaults().applyTo(form.getBody()); TacitFormComposite.addErrorPopup(form.getForm(), toolkit); Section section = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.EXPANDED); GridDataFactory.fillDefaults().grab(true, false).span(3, 1) .applyTo(section); section.setExpanded(true); // section.setText("Crawler Details"); //$NON-NLS-1$ ScrolledComposite sc = new ScrolledComposite(section, SWT.H_SCROLL | SWT.V_SCROLL); sc.setExpandHorizontal(true); sc.setExpandVertical(true); GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(false) .applyTo(sc); Composite sectionClient = toolkit.createComposite(section); sc.setContent(sectionClient); GridDataFactory.fillDefaults().grab(true, false).applyTo(sc); GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(false) .applyTo(sectionClient); section.setClient(sectionClient); Label dummy = toolkit.createLabel(sectionClient, "", SWT.NONE); GridDataFactory.fillDefaults().grab(false, false).span(3, 0) .applyTo(dummy); Label lblFilterType = toolkit.createLabel(sectionClient, "Filter Type:", SWT.NONE); GridDataFactory.fillDefaults().grab(false, false).span(1, 0) .applyTo(lblFilterType); termBtn = toolkit.createButton(sectionClient, "Term", SWT.RADIO); termBtn.setSelection(true); termBtn.setData("cases"); GridDataFactory.fillDefaults().grab(false, false).span(1, 0) .applyTo(termBtn); final Button issuesBtn = toolkit.createButton(sectionClient, "Issues", SWT.RADIO); GridDataFactory.fillDefaults().grab(true, false).span(1, 0) .applyTo(issuesBtn); issuesBtn.setData("issues"); Label filterRangeLbl = toolkit.createLabel(sectionClient, "Filter Range:", SWT.NONE); GridDataFactory.fillDefaults().grab(false, false).span(1, 0) .applyTo(filterRangeLbl); rangeCombo = new Combo(sectionClient, SWT.FLAT | SWT.READ_ONLY); GridDataFactory.fillDefaults().grab(true, false).span(2, 0) .applyTo(rangeCombo); toolkit.adapt(rangeCombo); fireFilterEvent((String) termBtn.getData(), rangeCombo); termBtn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (termBtn.getSelection()) fireFilterEvent((String) termBtn.getData(), rangeCombo); else fireFilterEvent((String) issuesBtn.getData(), rangeCombo); rangeCombo.select(0); } }); TacitFormComposite.createEmptyRow(toolkit, sectionClient); layoutData = TacitFormComposite.createOutputSection(toolkit, form.getBody(), form.getMessageManager()); Composite outputSectionClient = layoutData.getSectionClient(); createDownloadGroupSection(form.getBody()); form.setImage(SupremeCrawlerImageRegistry.getImageIconFactory() .getImage(IMAGE_CRAWL)); // form.setMessage("Invalid path", IMessageProvider.ERROR); this.setPartName("Supreme Crawler"); mgr = form.getToolBarManager(); addCrawlButton(mmng, layoutData.getOutputLabel(), mgr); Action helpAction = new Action() { @Override public ImageDescriptor getImageDescriptor() { return (SupremeCrawlerImageRegistry.getImageIconFactory() .getImageDescriptor(IMAGE_HELP_CO)); } @Override public String getToolTipText() { return "Help"; } @Override public void run() { PlatformUI.getWorkbench().getHelpSystem() .displayHelp("edu.usc.cssl.tacit.crawlers.supremecourt.ui.supremecourt"); }; }; mgr.add(helpAction); PlatformUI.getWorkbench().getHelpSystem() .setHelp(helpAction, "edu.usc.cssl.tacit.crawlers.supremecourt.ui.supremecourt"); PlatformUI.getWorkbench().getHelpSystem() .setHelp(form, "edu.usc.cssl.tacit.crawlers.supremecourt.ui.supremecourt"); form.getToolBarManager().update(true); toolkit.paintBordersFor(form.getBody()); } @Override public Object getAdapter(Class adapter) { if (adapter == Job.class) { return job; } return super.getAdapter(adapter); } private void addCrawlButton(final IMessageManager mmng, final Text outputPath, IToolBarManager mgr) { mgr.add(new Action() { @Override public ImageDescriptor getImageDescriptor() { return (SupremeCrawlerImageRegistry.getImageIconFactory() .getImageDescriptor(IMAGE_LRUN_OBJ)); } @Override public String getToolTipText() { return "Crawl"; } @Override public void run() { String selectedFilterValue = rangeCombo.getText(); if (selectedFilterValue.equals("All")) { if (termBtn.getSelection()) selectedFilterValue = "/cases"; else selectedFilterValue = "/issues"; } final SupremeCourtCrawler sc = new SupremeCourtCrawler( selectedFilterValue, outputPath.getText(), ISupremeCrawlerUIConstants.CRAWLER_URL); sc.setDownloadAudio(downloadAudio.getSelection()); sc.setTruncate(truncateAudio.getSelection()); TacitFormComposite .writeConsoleHeaderBegining("Crawling started "); job = new Job("Crawling...") { @Override protected IStatus run(IProgressMonitor monitor) { TacitFormComposite.setConsoleViewInFocus(); TacitFormComposite.updateStatusMessage( getViewSite(), null, null, form); monitor.beginTask("TACIT started crawling...", 10000); if (monitor.isCanceled()) { TacitFormComposite .writeConsoleHeaderBegining("<terminated> Crawling "); return Status.CANCEL_STATUS; } try { sc.looper(monitor); } catch (final IOException exception) { ConsoleView.printlInConsole(exception.toString()); Display.getDefault().syncExec(new Runnable() { @Override public void run() { ErrorDialog .openError( Display.getDefault() .getActiveShell(), "Problem Occurred", "Please Check your connectivity to server", new Status( IStatus.ERROR, CommonUiActivator.PLUGIN_ID, exception .getMessage())); } }); TacitFormComposite .writeConsoleHeaderBegining("<terminated> Crawling "); TacitFormComposite.updateStatusMessage( getViewSite(), "Crawling is stopped ", IStatus.INFO, form); return Status.CANCEL_STATUS; } TacitFormComposite .writeConsoleHeaderBegining("<terminated> Crawling "); ConsoleView .printlInConsoleln("Crawling is sucessfully completed."); TacitFormComposite.updateStatusMessage( getViewSite(), "Crawling completed", IStatus.OK, form); return Status.OK_STATUS; } }; job.setUser(true); if (canProceedCrawl()) { job.schedule(); } }; }); } protected boolean canProceedCrawl() { boolean canProceed = true; TacitFormComposite.updateStatusMessage(getViewSite(), null, null, form); form.getMessageManager().removeMessage("location"); String message = OutputPathValidation.getInstance() .validateOutputDirectory(layoutData.getOutputLabel().getText(), "Output"); if (message != null) { message = layoutData.getOutputLabel().getText() + " " + message; form.getMessageManager().addMessage("location", message, null, IMessageProvider.ERROR); canProceed = false; } return canProceed; } private void createDownloadGroupSection(Composite outputSectionClient) { Group downloadGroup = new Group(outputSectionClient, SWT.LEFT); downloadGroup.setText("Audio"); // downloadGroup.setBackground(outputSectionClient.getBackground()); downloadGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(); layout.numColumns = 1; downloadGroup.setLayout(layout); downloadGroup.setForeground(outputSectionClient.getForeground()); downloadAudio = new Button(downloadGroup, SWT.CHECK); downloadAudio.setText("Download Audio"); // downloadAudio.setBackground(outputSectionClient.getBackground()); truncateAudio = new Button(downloadGroup, SWT.CHECK); truncateAudio.setText("Truncate (1 MB) "); truncateAudio.setEnabled(false); // truncateAudio.setBackground(outputSectionClient.getBackground()); downloadAudio.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (downloadAudio.getSelection()) { truncateAudio.setEnabled(true); } else { truncateAudio.setEnabled(false); } } }); Label lblEmpty = new Label(downloadGroup, SWT.None); TacitFormComposite.createEmptyRow(toolkit, outputSectionClient); } /** * Passing the focus request to the viewer's control. */ @Override public void setFocus() { if (form != null) { form.setFocus(); } } private void fireFilterEvent(final String segment, final Combo combo) { Job loadFilters = new Job("Load Filter values") { private String[] comboLists; @Override protected IStatus run(IProgressMonitor monitor) { SupremCrawlerFilter sFilter = new SupremCrawlerFilter( ISupremeCrawlerUIConstants.CRAWLER_URL); List<String> items; try { items = sFilter.filters(segment); } catch (IOException e) { items = new ArrayList<String>(); items.add("Not able to retrieve list !!"); } comboLists = new String[items.size()]; comboLists = items.toArray(comboLists); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { combo.setItems(comboLists); combo.select(0); } }); return Status.OK_STATUS; } }; loadFilters.schedule(); } /* */ }