Solved

How to fix layout problem in my custom dialog box in Java?

Posted on 2013-11-14
4
330 Views
Last Modified: 2013-11-15
Hi,
I am working on creating a GUI in Java. In this GUI, I have a dialog box (which is actually a shell) and I have some buttons, a combo and a table in this dialog box.

I used layouts to put these items in the shell and they locate the way I want. However, I have two problems. (Please see the attachment for the print screen of the dialog box)

PROBLEM 1: The area between the rows are unnecessarily big. The first group has one text box and a combo. The second group has one table. And the third group has two buttons. The area between these groups are huge.

The position of the items are ok but the spacing between the groups are huge.

How can I make them stay closer to each other?

PROBLEM 2: In the second group, I have a table. Even though I say fillboth, the table does not fill the second group area. Initially the table is empty. Then after selecting something from the combo, some data populates in this table. But the table height is almost zero.

How can I make this table fill the group area with or without any data in it?

This is the code entire code I have to do this dialog box:

The LINE NUMBERS that could be related with this problem are:

106
108-113
170-175
350-355



public class ChangeListDlg extends Dialog {
    
	public static Table table;
	public static List<Integer> changeListsArray = new ArrayList<Integer>();
	public static List<StringBuilder> fileListArray = new ArrayList<StringBuilder>();
	public static List<String> stateArray = new ArrayList<String>();
	public static List<String> changeListDescriptionsArray = new ArrayList<String>();
    public static SelectedFileFoldersModel model = new SelectedFileFoldersModel();
    
    public static String changelistNum;
    
    public String getFileFolders()
    {
        return model.getFileOrFolderData();
    }

    public ChangeListDlg(Shell parent) {
        super(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
    }
    
    public void open() {
        Shell shell = new Shell(getParent(), getStyle());
        shell.setText("Select changelist");
        try {
			createContents(shell);
		} catch (ConnectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (AccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RequestException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ConfigException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchObjectException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ResourceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
                
        shell.pack();
        shell.open();
        
     // Move the dialog to the center of the top level shell.
        Rectangle shellBounds = getParent().getBounds();
        Rectangle dialogSize = shell.getBounds();

        shell.setLocation(
          shellBounds.x + (shellBounds.width - dialogSize.width) / 2,
          shellBounds.y + (shellBounds.height - dialogSize.height) / 2 );
        
        
        int frameX = shell.getSize().x - shell.getClientArea().width;
        int frameY = shell.getSize().y - shell.getClientArea().height;
        shell.setSize(500 + frameX, 300 + frameY);
        
        
        Display display = getParent().getDisplay();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch()) {
            display.sleep();
          }
        }
    }

    public List<IClientSummary> getAllPerforceWorkspaces(IOptionsServer p4d){
                        
            //for getting all the workspaces
            GetClientsOptions clientOptions = new GetClientsOptions();
            List<IClientSummary> clientSummaryList = null;
			try {
				clientSummaryList = p4d.getClients(clientOptions);
			} catch (P4JavaException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
            System.out.println(clientSummaryList.size());           

        return clientSummaryList;
    }

    
    private void createContents(final Shell shell) throws ConnectionException, AccessException, RequestException, ConfigException, NoSuchObjectException, ResourceException, URISyntaxException {
    	
    	//Connect to Perforce Server
    	final IOptionsServer p4d = ServerFactory.getOptionsServer(
			        ServerFactory.DEFAULT_PROTOCOL_NAME 
			        + "://" + "someserver", null);
			
			p4d.setUserName("tolgar");			

			p4d.connect();
        
    
        //Get the workspace and changelist information from Perforce
        List<IClientSummary> clientSummaryList = getAllPerforceWorkspaces(p4d);
                
        shell.setLayout(new GridLayout(1, true));
        
        GridLayout groupLayoutTwoRows = new GridLayout();
        Group groupTwoRows = new Group(shell, SWT.NONE);       
        groupTwoRows.setLayout(groupLayoutTwoRows);
        GridData firstRowGridData = new GridData(GridData.FILL_BOTH);
        groupTwoRows.setLayoutData(firstRowGridData);
        groupTwoRows.setLayout(new GridLayout(2, true));

//        Label label_submitted = new Label(shell, SWT.NONE);
//        label_submitted.setText("Type changelists");
//        GridData data_submitted = new GridData();
//        data_submitted.horizontalSpan = 2;
//        label_submitted.setLayoutData(data_submitted);
//        
//        final Text text_submittedChangelist = new Text(shell, SWT.BORDER);
//        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
//        data_submitted.horizontalSpan = 2;
//        text_submittedChangelist.setLayoutData(data_submitted);
        // --------- second row -----------------
//        Label label_shelvedPending = new Label(shell, SWT.NONE);
//        label_shelvedPending.setText("Or select changelists by username and workspace:");
//        GridData data_shelvedPending = new GridData();
//        data_shelvedPending.horizontalSpan = 2;
//        label_shelvedPending.setLayoutData(data_shelvedPending);
        
        Label label_submitted = new Label(groupTwoRows, SWT.NONE);
        label_submitted.setText("Type changelists");
        GridData data_submitted = new GridData();
        label_submitted.setLayoutData(data_submitted);
        
        
        Label label_workspace = new Label(groupTwoRows, SWT.NONE);
        label_workspace.setText("Workspace:");
        GridData data_workspace = new GridData();
        label_workspace.setLayoutData(data_workspace);
        
        final Text text_submittedChangelist = new Text(groupTwoRows, SWT.BORDER);
        GridData data_textSubmittedChangelist = new GridData(GridData.FILL_HORIZONTAL);
        text_submittedChangelist.setLayoutData(data_textSubmittedChangelist);
        
        final Combo combo_workspaces = new Combo(groupTwoRows, SWT.READ_ONLY);
        combo_workspaces.setEnabled(true);

        List<String> workspacesArray = new ArrayList<String>();
        final String[] changelistStateArray = {"Submitted", "Shelved", "Pending"};     
        
        //This is to create the data(changelist number, file name, description) in each column using P4JAVA
        final GetChangelistsOptions getoptions = new GetChangelistsOptions();
        //getoptions.setType(IChangelist.Type.SUBMITTED);
        for(IClientSummary eachChangeSummary : clientSummaryList){
            String eachClientName = eachChangeSummary.getName();
            workspacesArray.add(eachChangeSummary.getName());
        }
        
        //The following line will be deleted once p4java is used to get the workspaces
        //String items[] = { "Workspace # One", "Workspace # Two", "Workspace # Three" };
        
        //combo_workspaces.setItems(items); combo_workspaces.select(2);
        combo_workspaces.setItems(workspacesArray.toArray(new String[workspacesArray.size()]));
        GridData data_comboWorkspaces = new GridData(GridData.FILL_HORIZONTAL);
        combo_workspaces.setLayoutData(data_comboWorkspaces);

        // ----------- the table -----------------
        GridLayout groupLayoutTable = new GridLayout();
        Group groupTable = new Group(shell, SWT.NONE);       
        groupTable.setLayout(groupLayoutTable);
        GridData tableGridData = new GridData(GridData.FILL_BOTH);
        groupTable.setLayoutData(tableGridData);
        groupTable.setLayout(new GridLayout(1, true));
        table = new Table(groupTable, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.WRAP | SWT.MULTI);
        table.setHeaderVisible(true);
        table.getVerticalBar().setVisible(true);
        final String[] titles = { " ", "State", "Changelist", "Files", "Description" };
        
        //This is to create the column titles
        for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
            TableColumn column = new TableColumn(table, SWT.NULL);
            column.setText(titles[loopIndex]);
        }
        
        int frameShellWidth = shell.getSize().x;
        tableGridData.widthHint = frameShellWidth;
        table.setLayoutData(tableGridData);
        
        for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
            table.getColumn(loopIndex).pack();
       }
      table.setRedraw(true);
        
        //String selectedWorkspace = combo_workspaces.getText();
        //if(eachClientName.contains(selectedWorkspace)){
        
        combo_workspaces.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) { 
            	
            	
            	//clear the table
            	 table.removeAll();
            	
	        	for (String changelistState : changelistStateArray){
	                getoptions.setClientName(combo_workspaces.getText());
	                
	                if (changelistState.equalsIgnoreCase("Submitted")){
	                	getoptions.setType(IChangelist.Type.SUBMITTED);
	                } else if (changelistState.equalsIgnoreCase("Shelved")){
	                	getoptions.setType(IChangelist.Type.SHELVED);
	                } else if(changelistState.equalsIgnoreCase("Pending")){
	                	getoptions.setType(IChangelist.Type.PENDING);
	                }
	                	                
	                List<IChangelistSummary> changeLists = null;
					try {					
						changeLists = p4d.getChangelists(null, getoptions);
					} catch (P4JavaException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
	                //System.out.println(eachChangeSummary.getName() +" : "+eachChangeSummary.getDescription() );
	                    for(IChangelistSummary eachChangeList : changeLists){
	                    	
	                    	StringBuilder depotfiles = new StringBuilder();
	                    	changeListsArray.add(eachChangeList.getId());
	                    	changeListDescriptionsArray.add(eachChangeList.getDescription());
	                    	stateArray.add(changelistState);
	                    	System.out.println(eachChangeList.getId()+" - " + eachChangeList.getDescription());
	                    		
	                        IChangelist cinfo = null;
							try {
								cinfo = p4d.getChangelist(eachChangeList.getId());
							} catch (ConnectionException e3) {
								// TODO Auto-generated catch block
								e3.printStackTrace();
							} catch (RequestException e3) {
								// TODO Auto-generated catch block
								e3.printStackTrace();
							} catch (AccessException e3) {
								// TODO Auto-generated catch block
								e3.printStackTrace();
							}
	                        List<IFileSpec> filesList = null;
							try {
								filesList = cinfo.getFiles(true);
							} catch (ConnectionException e2) {
								// TODO Auto-generated catch block
								e2.printStackTrace();
							} catch (RequestException e2) {
								// TODO Auto-generated catch block
								e2.printStackTrace();
							} catch (AccessException e2) {
								// TODO Auto-generated catch block
								e2.printStackTrace();
							}
	                        try {
								filesList = p4d.getChangelistFiles(eachChangeList.getId());
							} catch (ConnectionException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							} catch (RequestException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							} catch (AccessException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
	                        for(IFileSpec eachFileSpec : filesList){
	                            System.out.println(eachFileSpec.getDepotPathString());
	                            depotfiles = depotfiles.append(eachFileSpec.getDepotPathString());
	                        }    
	                        fileListArray.add(depotfiles);
	                    }
	        	}
	        	
	        	
	            //This is to populate data in the table
	            for (int loopIndex = 0; loopIndex < changeListsArray.size(); loopIndex++) {
	              TableItem item = new TableItem(table, SWT.NULL);
	                           
	        	  TableEditor editor = new TableEditor (table);
	        	  Button checkButton = new Button(table, SWT.CHECK);
	        	  checkButton.pack();
	        	  editor.minimumWidth = checkButton.getSize ().x;
	        	  editor.horizontalAlignment = SWT.CENTER;
	        	  editor.setEditor(checkButton, item, 0);
	              
	              
	              item.setText(1, stateArray.get(loopIndex));
	              item.setText(2, changeListsArray.get(loopIndex).toString());
	              item.setText(3, fileListArray.get(loopIndex).toString());
	              item.setText(4, changeListDescriptionsArray.get(loopIndex));
	              if (loopIndex % 2 == 0) item.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
	            }
	            
	            
	            for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
	                table.getColumn(loopIndex).pack();
	            }
	            
	            table.setRedraw(true);
	            
	            cleanList(changeListsArray, fileListArray, stateArray, changeListDescriptionsArray);
	            
	            Listener sortListener = new Listener() {
	                public void handleEvent(Event e) {
	                    TableItem[] items = table.getItems();
	                    Collator collator = Collator.getInstance(Locale.getDefault());
	                    TableColumn column = (TableColumn) e.widget;
	                    int index = column == table.getColumn(0) ? 0 : 1;
	                    for (int i = 1; i < items.length; i++) {
	                        String value1 = items[i].getText(index);
	                        for (int j = 0; j < i; j++) {
	                            String value2 = items[j].getText(index);
	                            if (collator.compare(value1, value2) < 0) {
	                                String[] values = { items[i].getText(0),
	                                        items[i].getText(1), items[i].getText(2),
	                                        items[i].getText(3) };
	                                items[i].dispose();
	                                TableItem item = new TableItem(table, SWT.NONE, j);
	                                item.setText(values);
	                                items = table.getItems();
	                                break;
	                            }
	                        }
	                    }
	                    table.setSortColumn(column);
	                }
	            };
	            table.getColumn(0).addListener(SWT.Selection, sortListener);
	            table.getColumn(1).addListener(SWT.Selection, sortListener);
	            table.getColumn(2).addListener(SWT.Selection, sortListener);
	            table.setSortColumn(table.getColumn(0));
	            table.setSortDirection(SWT.TOP);
	            
	            table.setRedraw(true);
            }
          });
        //}  
        
                            
        GridData data3 = new GridData(GridData.FILL_HORIZONTAL);
        data3.horizontalSpan = 2;
        table.setLayoutData(data3);
        
        // ----------- third row -----------------
        GridLayout groupLayoutOK = new GridLayout();       
        Group groupOK = new Group(shell, SWT.NONE);       
        groupOK.setLayout(groupLayoutOK);
        GridData OKGridData = new GridData(GridData.FILL_BOTH);
        groupOK.setLayoutData(OKGridData);
        groupOK.setLayout(new GridLayout(2, true));
        
        Button ok = new Button(groupOK, SWT.PUSH);
        ok.setText("Add files from this change list");
        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
        ok.setLayoutData(data_submitted);
        ok.addSelectionListener(new SelectionAdapter() {
          public void widgetSelected(SelectionEvent event) {
            String changeList = text_submittedChangelist.toString();
            model.storeFileOrFolder(changeList);
            //populate changelist in the text box
            
            if (!text_submittedChangelist.getText().isEmpty()){
	            setChangelist(text_submittedChangelist.getText());
	            String changeListNumbers = changelistNum.replaceAll(",", "\r\n-c ");

	            //Replace multiple spaces with once space 
	            changeListNumbers = changeListNumbers.replaceAll(" +", " ");
	            populatechangelist("-c " + changeListNumbers + "\r\n");
	            shell.close();	
	            //disconnect from the Perforce server
	            disconnectFromServer(p4d);
            }else{
            	shell.close();
                //disconnect from the Perforce server
            	disconnectFromServer(p4d);
            }
          }
        });

        Button cancel = new Button(groupOK, SWT.PUSH);
        cancel.setText("Cancel");
        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
        cancel.setLayoutData(data_submitted);
        cancel.addSelectionListener(new SelectionAdapter() {
          public void widgetSelected(SelectionEvent event) {
            shell.close();
          }
        });
        shell.setDefaultButton(ok);
        
    }
    
    public void disconnectFromServer(IOptionsServer p4d){
        //disconnect from the Perforce server
        try {
			p4d.disconnect();
		} catch (ConnectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (AccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    public void setChangelist(String changelistNumber){        
        changelistNum = changelistNumber;
    }
    
    
    public void populatechangelist(String changeLists){
        if (Gui.txt.getText().isEmpty()){
            Gui.txt.setText(Gui.txt.getText() + changeLists);
        } else{
            Gui.txt.setText(Gui.txt.getText() + "\r\n" +  changeLists);
        }
    }
    

    public static void cleanList(List<Integer> changeListsArray, List<StringBuilder> fileListArray, List<String> stateArray, List<String> changeListDescriptionsArray){
    	changeListsArray.removeAll(changeListsArray);
    	fileListArray.removeAll(fileListArray);
    	stateArray.removeAll(stateArray);
    	changeListDescriptionsArray.removeAll(changeListDescriptionsArray);
    }
    
}

Open in new window

custom-dialog-box.png
0
Comment
Question by:Tolgar
  • 2
  • 2
4 Comments
 
LVL 14

Expert Comment

by:jb1dev
Comment Utility
Would be nice if you included all of the import statements so this can be compiled and then recreated.

I'm trying to guess between the perforce api and the swt api what to import and from which package. It's not making this any easier for me to recreate and play with in order to find a solution.
0
 

Author Comment

by:Tolgar
Comment Utility
These are all the import statements I have in the code:

import java.net.URISyntaxException;
import java.text.Collator;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
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.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

import com.perforce.p4java.client.IClient;
import com.perforce.p4java.client.IClientSummary;
import com.perforce.p4java.core.IChangelist;
import com.perforce.p4java.core.IChangelistSummary;
import com.perforce.p4java.core.file.FileSpecBuilder;
import com.perforce.p4java.core.file.IFileSpec;
import com.perforce.p4java.exception.AccessException;
import com.perforce.p4java.exception.ConfigException;
import com.perforce.p4java.exception.ConnectionException;
import com.perforce.p4java.exception.NoSuchObjectException;
import com.perforce.p4java.exception.P4JavaException;
import com.perforce.p4java.exception.RequestException;
import com.perforce.p4java.exception.ResourceException;
import com.perforce.p4java.option.server.GetChangelistsOptions;
import com.perforce.p4java.option.server.GetClientsOptions;
import com.perforce.p4java.server.IOptionsServer;
import com.perforce.p4java.server.IServer;
import com.perforce.p4java.server.ServerFactory;

Open in new window


Thanks,
0
 

Author Comment

by:Tolgar
Comment Utility
I mistakenly posted here a wrong comment. Please ignore it if you saw it. My last comment is the list of import statements.

Thanks,
0
 
LVL 14

Accepted Solution

by:
jb1dev earned 500 total points
Comment Utility
My compiler doesn't know what a SelectedFileFoldersModel is.

So once I comment out everything I can just to get this to compile, I get an empty dialog.

Here's what I finally got to compile. Why not post a simple snippet of code which compiles and illustrates the problem you are having?


import java.net.URISyntaxException;
import java.text.Collator;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
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.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

import com.perforce.p4java.client.IClient;
import com.perforce.p4java.client.IClientSummary;
import com.perforce.p4java.core.IChangelist;
import com.perforce.p4java.core.IChangelistSummary;
import com.perforce.p4java.core.file.FileSpecBuilder;
import com.perforce.p4java.core.file.IFileSpec;
import com.perforce.p4java.exception.AccessException;
import com.perforce.p4java.exception.ConfigException;
import com.perforce.p4java.exception.ConnectionException;
import com.perforce.p4java.exception.NoSuchObjectException;
import com.perforce.p4java.exception.P4JavaException;
import com.perforce.p4java.exception.RequestException;
import com.perforce.p4java.exception.ResourceException;
import com.perforce.p4java.option.server.GetChangelistsOptions;
import com.perforce.p4java.option.server.GetClientsOptions;
import com.perforce.p4java.server.IOptionsServer;
import com.perforce.p4java.server.IServer;
import com.perforce.p4java.server.ServerFactory;


public class ChangeListDlg extends Dialog {
    
    public static Table table;
    public static List<Integer> changeListsArray = new ArrayList<Integer>();
    public static List<StringBuilder> fileListArray = new ArrayList<StringBuilder>();
    public static List<String> stateArray = new ArrayList<String>();
    public static List<String> changeListDescriptionsArray = new ArrayList<String>();
    // public static SelectedFileFoldersModel model = new SelectedFileFoldersModel();
    
    public static String changelistNum;
    
    public String getFileFolders()
    {
        // return model.getFileOrFolderData();
        return null;
    }

    public ChangeListDlg(Shell parent) {
        super(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
    }
    
    public void open() {
        Shell shell = new Shell(getParent(), getStyle());
        shell.setText("Select changelist");
        try {
            createContents(shell);
        } catch (ConnectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (AccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (RequestException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ConfigException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchObjectException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ResourceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
                
        shell.pack();
        shell.open();
        
     // Move the dialog to the center of the top level shell.
        Rectangle shellBounds = getParent().getBounds();
        Rectangle dialogSize = shell.getBounds();

        shell.setLocation(
          shellBounds.x + (shellBounds.width - dialogSize.width) / 2,
          shellBounds.y + (shellBounds.height - dialogSize.height) / 2 );
        
        
        int frameX = shell.getSize().x - shell.getClientArea().width;
        int frameY = shell.getSize().y - shell.getClientArea().height;
        shell.setSize(500 + frameX, 300 + frameY);
        
        
        Display display = getParent().getDisplay();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch()) {
            display.sleep();
          }
        }
    }

    /*
    public List<IClientSummary> getAllPerforceWorkspaces(IOptionsServer p4d){
                        
            //for getting all the workspaces
            GetClientsOptions clientOptions = new GetClientsOptions();
            List<IClientSummary> clientSummaryList = null;
            try {
                clientSummaryList = p4d.getClients(clientOptions);
            } catch (P4JavaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(clientSummaryList.size());           

        return clientSummaryList;
    }
    */

    
    private void createContents(final Shell shell) throws ConnectionException, AccessException, RequestException, ConfigException, NoSuchObjectException, ResourceException, URISyntaxException {
        
        //Connect to Perforce Server
        /*
        final IOptionsServer p4d = ServerFactory.getOptionsServer(
                    ServerFactory.DEFAULT_PROTOCOL_NAME 
                    + "://" + "someserver", null);
            
            p4d.setUserName("tolgar");          

            p4d.connect();
        */

    
        //Get the workspace and changelist information from Perforce
        // List<IClientSummary> clientSummaryList = getAllPerforceWorkspaces(p4d);
                
        shell.setLayout(new GridLayout(1, true));
        
        GridLayout groupLayoutTwoRows = new GridLayout();
        Group groupTwoRows = new Group(shell, SWT.NONE);       
        groupTwoRows.setLayout(groupLayoutTwoRows);
        GridData firstRowGridData = new GridData(GridData.FILL_BOTH);
        groupTwoRows.setLayoutData(firstRowGridData);
        groupTwoRows.setLayout(new GridLayout(2, true));

//        Label label_submitted = new Label(shell, SWT.NONE);
//        label_submitted.setText("Type changelists");
//        GridData data_submitted = new GridData();
//        data_submitted.horizontalSpan = 2;
//        label_submitted.setLayoutData(data_submitted);
//        
//        final Text text_submittedChangelist = new Text(shell, SWT.BORDER);
//        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
//        data_submitted.horizontalSpan = 2;
//        text_submittedChangelist.setLayoutData(data_submitted);
        // --------- second row -----------------
//        Label label_shelvedPending = new Label(shell, SWT.NONE);
//        label_shelvedPending.setText("Or select changelists by username and workspace:");
//        GridData data_shelvedPending = new GridData();
//        data_shelvedPending.horizontalSpan = 2;
//        label_shelvedPending.setLayoutData(data_shelvedPending);
        
        Label label_submitted = new Label(groupTwoRows, SWT.NONE);
        label_submitted.setText("Type changelists");
        GridData data_submitted = new GridData();
        label_submitted.setLayoutData(data_submitted);
        
        
        Label label_workspace = new Label(groupTwoRows, SWT.NONE);
        label_workspace.setText("Workspace:");
        GridData data_workspace = new GridData();
        label_workspace.setLayoutData(data_workspace);
        
        final Text text_submittedChangelist = new Text(groupTwoRows, SWT.BORDER);
        GridData data_textSubmittedChangelist = new GridData(GridData.FILL_HORIZONTAL);
        text_submittedChangelist.setLayoutData(data_textSubmittedChangelist);
        
        final Combo combo_workspaces = new Combo(groupTwoRows, SWT.READ_ONLY);
        combo_workspaces.setEnabled(true);

        List<String> workspacesArray = new ArrayList<String>();
        final String[] changelistStateArray = {"Submitted", "Shelved", "Pending"};     
        
        //This is to create the data(changelist number, file name, description) in each column using P4JAVA
        final GetChangelistsOptions getoptions = new GetChangelistsOptions();
        //getoptions.setType(IChangelist.Type.SUBMITTED);
        /*
        for(IClientSummary eachChangeSummary : clientSummaryList){
            String eachClientName = eachChangeSummary.getName();
            workspacesArray.add(eachChangeSummary.getName());
        }
        */
        
        //The following line will be deleted once p4java is used to get the workspaces
        //String items[] = { "Workspace # One", "Workspace # Two", "Workspace # Three" };
        
        //combo_workspaces.setItems(items); combo_workspaces.select(2);
        combo_workspaces.setItems(workspacesArray.toArray(new String[workspacesArray.size()]));
        GridData data_comboWorkspaces = new GridData(GridData.FILL_HORIZONTAL);
        combo_workspaces.setLayoutData(data_comboWorkspaces);

        // ----------- the table -----------------
        GridLayout groupLayoutTable = new GridLayout();
        Group groupTable = new Group(shell, SWT.NONE);       
        groupTable.setLayout(groupLayoutTable);
        GridData tableGridData = new GridData(GridData.FILL_BOTH);
        groupTable.setLayoutData(tableGridData);
        groupTable.setLayout(new GridLayout(1, true));
        table = new Table(groupTable, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.WRAP | SWT.MULTI);
        table.setHeaderVisible(true);
        table.getVerticalBar().setVisible(true);
        final String[] titles = { " ", "State", "Changelist", "Files", "Description" };
        
        //This is to create the column titles
        for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
            TableColumn column = new TableColumn(table, SWT.NULL);
            column.setText(titles[loopIndex]);
        }
        
        int frameShellWidth = shell.getSize().x;
        tableGridData.widthHint = frameShellWidth;
        table.setLayoutData(tableGridData);
        
        for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
            table.getColumn(loopIndex).pack();
       }
      table.setRedraw(true);
        
        //String selectedWorkspace = combo_workspaces.getText();
        //if(eachClientName.contains(selectedWorkspace)){
        
        combo_workspaces.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) { 
                
                
                //clear the table
                 table.removeAll();
                
                for (String changelistState : changelistStateArray){
                    getoptions.setClientName(combo_workspaces.getText());
                    
                    if (changelistState.equalsIgnoreCase("Submitted")){
                        getoptions.setType(IChangelist.Type.SUBMITTED);
                    } else if (changelistState.equalsIgnoreCase("Shelved")){
                        getoptions.setType(IChangelist.Type.SHELVED);
                    } else if(changelistState.equalsIgnoreCase("Pending")){
                        getoptions.setType(IChangelist.Type.PENDING);
                    }
                                        
                    List<IChangelistSummary> changeLists = null;
                    /*
                    try {                   
                        // changeLists = p4d.getChangelists(null, getoptions);
                    } catch (P4JavaException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    */
                    //System.out.println(eachChangeSummary.getName() +" : "+eachChangeSummary.getDescription() );
                        for(IChangelistSummary eachChangeList : changeLists){
                            
                            StringBuilder depotfiles = new StringBuilder();
                            changeListsArray.add(eachChangeList.getId());
                            changeListDescriptionsArray.add(eachChangeList.getDescription());
                            stateArray.add(changelistState);
                            System.out.println(eachChangeList.getId()+" - " + eachChangeList.getDescription());
                                
                            IChangelist cinfo = null;

                            /*
                            try {
                                // cinfo = p4d.getChangelist(eachChangeList.getId());
                            } catch (ConnectionException e3) {
                                // TODO Auto-generated catch block
                                e3.printStackTrace();
                            } catch (RequestException e3) {
                                // TODO Auto-generated catch block
                                e3.printStackTrace();
                            } catch (AccessException e3) {
                                // TODO Auto-generated catch block
                                e3.printStackTrace();
                            }
                            */

                            List<IFileSpec> filesList = null;
                            try {
                                filesList = cinfo.getFiles(true);
                            } catch (ConnectionException e2) {
                                // TODO Auto-generated catch block
                                e2.printStackTrace();
                            } catch (RequestException e2) {
                                // TODO Auto-generated catch block
                                e2.printStackTrace();
                            } catch (AccessException e2) {
                                // TODO Auto-generated catch block
                                e2.printStackTrace();
                            }
                            /*
                            try {
                                // filesList = p4d.getChangelistFiles(eachChangeList.getId());
                            } catch (ConnectionException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            } catch (RequestException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            } catch (AccessException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                            */
                            for(IFileSpec eachFileSpec : filesList){
                                System.out.println(eachFileSpec.getDepotPathString());
                                depotfiles = depotfiles.append(eachFileSpec.getDepotPathString());
                            }    
                            fileListArray.add(depotfiles);
                        }
                }
                
                
                //This is to populate data in the table
                for (int loopIndex = 0; loopIndex < changeListsArray.size(); loopIndex++) {
                  TableItem item = new TableItem(table, SWT.NULL);
                               
                  TableEditor editor = new TableEditor (table);
                  Button checkButton = new Button(table, SWT.CHECK);
                  checkButton.pack();
                  editor.minimumWidth = checkButton.getSize ().x;
                  editor.horizontalAlignment = SWT.CENTER;
                  editor.setEditor(checkButton, item, 0);
                  
                  
                  item.setText(1, stateArray.get(loopIndex));
                  item.setText(2, changeListsArray.get(loopIndex).toString());
                  item.setText(3, fileListArray.get(loopIndex).toString());
                  item.setText(4, changeListDescriptionsArray.get(loopIndex));
                  if (loopIndex % 2 == 0) item.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
                }
                
                
                for (int loopIndex = 0; loopIndex < titles.length; loopIndex++) {
                    table.getColumn(loopIndex).pack();
                }
                
                table.setRedraw(true);
                
                cleanList(changeListsArray, fileListArray, stateArray, changeListDescriptionsArray);
                
                Listener sortListener = new Listener() {
                    public void handleEvent(Event e) {
                        TableItem[] items = table.getItems();
                        Collator collator = Collator.getInstance(Locale.getDefault());
                        TableColumn column = (TableColumn) e.widget;
                        int index = column == table.getColumn(0) ? 0 : 1;
                        for (int i = 1; i < items.length; i++) {
                            String value1 = items[i].getText(index);
                            for (int j = 0; j < i; j++) {
                                String value2 = items[j].getText(index);
                                if (collator.compare(value1, value2) < 0) {
                                    String[] values = { items[i].getText(0),
                                            items[i].getText(1), items[i].getText(2),
                                            items[i].getText(3) };
                                    items[i].dispose();
                                    TableItem item = new TableItem(table, SWT.NONE, j);
                                    item.setText(values);
                                    items = table.getItems();
                                    break;
                                }
                            }
                        }
                        table.setSortColumn(column);
                    }
                };
                table.getColumn(0).addListener(SWT.Selection, sortListener);
                table.getColumn(1).addListener(SWT.Selection, sortListener);
                table.getColumn(2).addListener(SWT.Selection, sortListener);
                table.setSortColumn(table.getColumn(0));
                table.setSortDirection(SWT.TOP);
                
                table.setRedraw(true);
            }
          });
        //}  
        
                            
        GridData data3 = new GridData(GridData.FILL_HORIZONTAL);
        data3.horizontalSpan = 2;
        table.setLayoutData(data3);
        
        // ----------- third row -----------------
        GridLayout groupLayoutOK = new GridLayout();       
        Group groupOK = new Group(shell, SWT.NONE);       
        groupOK.setLayout(groupLayoutOK);
        GridData OKGridData = new GridData(GridData.FILL_BOTH);
        groupOK.setLayoutData(OKGridData);
        groupOK.setLayout(new GridLayout(2, true));
        
        Button ok = new Button(groupOK, SWT.PUSH);
        ok.setText("Add files from this change list");
        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
        ok.setLayoutData(data_submitted);
        ok.addSelectionListener(new SelectionAdapter() {
          public void widgetSelected(SelectionEvent event) {
            String changeList = text_submittedChangelist.toString();
            // model.storeFileOrFolder(changeList);
            //populate changelist in the text box
            
            if (!text_submittedChangelist.getText().isEmpty()){
                setChangelist(text_submittedChangelist.getText());
                String changeListNumbers = changelistNum.replaceAll(",", "\r\n-c ");

                //Replace multiple spaces with once space 
                changeListNumbers = changeListNumbers.replaceAll(" +", " ");
                populatechangelist("-c " + changeListNumbers + "\r\n");
                shell.close();  
                //disconnect from the Perforce server
                // disconnectFromServer(p4d);
            }else{
                shell.close();
                //disconnect from the Perforce server
                // disconnectFromServer(p4d);
            }
          }
        });

        Button cancel = new Button(groupOK, SWT.PUSH);
        cancel.setText("Cancel");
        data_submitted = new GridData(GridData.FILL_HORIZONTAL);
        cancel.setLayoutData(data_submitted);
        cancel.addSelectionListener(new SelectionAdapter() {
          public void widgetSelected(SelectionEvent event) {
            shell.close();
          }
        });
        shell.setDefaultButton(ok);
        
    }
    
    public void disconnectFromServer(IOptionsServer p4d){
        //disconnect from the Perforce server
        try {
            p4d.disconnect();
        } catch (ConnectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (AccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public void setChangelist(String changelistNumber){        
        changelistNum = changelistNumber;
    }
    
    
    public void populatechangelist(String changeLists){
        /*
        if (Gui.txt.getText().isEmpty()){
            Gui.txt.setText(Gui.txt.getText() + changeLists);
        } else{
            Gui.txt.setText(Gui.txt.getText() + "\r\n" +  changeLists);
        }
        */
    }
    

    public static void cleanList(List<Integer> changeListsArray, List<StringBuilder> fileListArray, List<String> stateArray, List<String> changeListDescriptionsArray){
        changeListsArray.removeAll(changeListsArray);
        fileListArray.removeAll(fileListArray);
        stateArray.removeAll(stateArray);
        changeListDescriptionsArray.removeAll(changeListDescriptionsArray);
    }
   
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
      
        ChangeListDlg dlg = new ChangeListDlg(shell);
 
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();

    }


}

Open in new window

0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now