package LinGUIne.parts.advanced; import java.util.ArrayList; import java.util.Date; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.TableColumn; import LinGUIne.model.IProjectData; import LinGUIne.model.Project; import LinGUIne.model.ProjectManager; import LinGUIne.model.Result; /** * Properties Composite to display metadata about selected ProjectData. * * @author Kyle Mullins */ public class ProjectExplorerProperties { private ProjectManager projectMan; private Composite mainComposite; private TableViewer tblMetadata; /** * Creates a new properties view. * * @param projects The ProjectManager. */ public ProjectExplorerProperties(ProjectManager projects){ projectMan = projects; } /** * Creates the Composite for the properties. * * @param parent The parent Composite. */ public void createComposite(Composite parent){ mainComposite = new Composite(parent, SWT.NONE); mainComposite.setLayout(new GridLayout(1, false)); tblMetadata = new TableViewer(mainComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); createColumns(); tblMetadata.getTable().setHeaderVisible(true); tblMetadata.getTable().setLinesVisible(true); tblMetadata.setContentProvider(new ArrayContentProvider()); tblMetadata.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); } /** * Returns the properties Composite that was created. */ public Composite getComposite(){ return mainComposite; } /** * Updates the part to show metadata about the currently selected * ProjectData. This will get called whenever the current selection in the * ProjectExplorer changes. * * @param selection The currently selected ProjectData. */ public void setInput(ProjectExplorerSelection selection){ if(selection != null){ ArrayList<IProjectData> selectedData = new ArrayList<IProjectData>(); for(String projectName: selection.getSelectedProjects()){ for(String dataName: selection.getSelectedOriginalData( projectName)){ selectedData.add(projectMan.getProject(projectName). getProjectData(dataName)); } } tblMetadata.setInput(selectedData); } } /** * Creates the columns necessary for the table. The current columns are: * File Name, Type, Date Modified, Size, Annotated?, and Available Results. */ private void createColumns() { String[] titles = {"File Name", "Type", "Date Modified", "Size", "Annotated?", "Available Results"}; int[] bounds = {100, 100, 100, 100, 100, 100}; TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; return data.getName(); } }); col = createTableViewerColumn(titles[1], bounds[1]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; return data.getClass().getSimpleName(); } }); col = createTableViewerColumn(titles[2], bounds[2]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; return (new Date(data.getFile().lastModified())).toString(); } }); col = createTableViewerColumn(titles[3], bounds[3]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; return (int)Math.ceil(((double)data.getFile().length() / 1024d)) + " KB"; } }); col = createTableViewerColumn(titles[4], bounds[4]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; Project parentProject = getParentProject(data); return parentProject.isAnnotated(data) ? "Yes" : "No"; } }); col = createTableViewerColumn(titles[5], bounds[5]); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IProjectData data = (IProjectData)element; Project parentProject = getParentProject(data); String resultStr = ""; for(Result result: parentProject.getResults(data)){ resultStr += result.getClass().getSimpleName() + ";"; } return resultStr; } }); } /** * Creates columns with consistent properties, such as the ability to be * resized and movable. * * @param title The title for this column * @param bound The width of the column, in pixels * * @return A TableViewerColumn ready to be used */ private TableViewerColumn createTableViewerColumn(String title, int bound) { TableViewerColumn viewerColumn = new TableViewerColumn(tblMetadata, SWT.NONE); TableColumn column = viewerColumn.getColumn(); column.setText(title); column.setWidth(bound); column.setResizable(true); column.setMoveable(true); return viewerColumn; } /** * Finds and returns the Project containing the given ProjectData. */ private Project getParentProject(IProjectData projData){ for(Project proj: projectMan.getProjects()){ if(proj.containsProjectData(projData)){ return proj; } } return null; } }