core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/api/sdk/ui/SBSv2ConfigManager.java
branchC3_BUILDER_WORK
changeset 1502 31f428aec716
parent 1500 9dcfd25090a5
child 1511 a0d2867d6a81
equal deleted inserted replaced
1500:9dcfd25090a5 1502:31f428aec716
     1 package com.nokia.carbide.cpp.internal.api.sdk.ui;
       
     2 
       
     3 import java.util.ArrayList;
       
     4 import java.util.List;
       
     5 
       
     6 import org.eclipse.jface.viewers.ArrayContentProvider;
       
     7 import org.eclipse.jface.viewers.CellEditor;
       
     8 import org.eclipse.jface.viewers.CheckboxTableViewer;
       
     9 import org.eclipse.jface.viewers.ColumnViewer;
       
    10 import org.eclipse.jface.viewers.EditingSupport;
       
    11 import org.eclipse.jface.viewers.ITableLabelProvider;
       
    12 import org.eclipse.jface.viewers.LabelProvider;
       
    13 import org.eclipse.jface.viewers.TableViewerColumn;
       
    14 import org.eclipse.swt.SWT;
       
    15 import org.eclipse.swt.graphics.Image;
       
    16 import org.eclipse.swt.layout.GridData;
       
    17 import org.eclipse.swt.layout.GridLayout;
       
    18 import org.eclipse.swt.widgets.Button;
       
    19 import org.eclipse.swt.widgets.Composite;
       
    20 import org.eclipse.swt.widgets.Control;
       
    21 import org.eclipse.swt.widgets.DirectoryDialog;
       
    22 import org.eclipse.swt.widgets.Table;
       
    23 import org.eclipse.swt.widgets.Text;
       
    24 
       
    25 import com.nokia.carbide.cpp.internal.api.sdk.BuildContextSBSv2;
       
    26 import com.nokia.carbide.cpp.sdk.core.ISBSv2BuildContext;
       
    27 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
       
    28 import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
       
    29 import com.nokia.carbide.cpp.ui.TextAndDialogCellEditor;
       
    30 import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils;
       
    31 
       
    32 public class SBSv2ConfigManager extends Composite {
       
    33 
       
    34 	private CheckboxTableViewer sbsConfigTableViewer;
       
    35 	private List<ISBSv2BuildContext> sbsContexts;
       
    36 	List<String> globalBuildAliasList = new ArrayList<String>();
       
    37 	List<String> globalProductList = new ArrayList<String>();
       
    38 	List<ISBSv2BuildContext> sbsBuildContexts = new ArrayList<ISBSv2BuildContext>();
       
    39 	
       
    40 	private class SBSv2BuildContextLabelProvider extends LabelProvider implements ITableLabelProvider {
       
    41 		public Image getColumnImage(Object element, int columnIndex) {
       
    42 			return null;
       
    43 		}
       
    44 
       
    45 		public String getColumnText(Object element, int columnIndex) {
       
    46 			ISBSv2BuildContext buildContext = (ISBSv2BuildContext) element;
       
    47 			switch (columnIndex) {
       
    48 			case 1:
       
    49 				return buildContext.getSBSv2Alias();
       
    50 			case 2:
       
    51 				return buildContext.getBuildVariationName();
       
    52 			case 3:
       
    53 				return buildContext.getDisplayString();
       
    54 			default:
       
    55 				return "";
       
    56 			}
       
    57 		}
       
    58 	}
       
    59 	
       
    60 	private class BuildAliasEditingSupport extends EditingSupport {
       
    61 		private BuildAliasCellEditor editor;
       
    62 
       
    63 		public BuildAliasEditingSupport(ColumnViewer viewer) {
       
    64 			super(viewer);
       
    65 			editor = new BuildAliasCellEditor((Composite) viewer.getControl());
       
    66 		}
       
    67 
       
    68 		@Override
       
    69 		protected boolean canEdit(Object element) {
       
    70 			if (element instanceof ISBSv2BuildContext) {
       
    71 				return true;
       
    72 			}
       
    73 			return false;
       
    74 		}
       
    75 
       
    76 		@Override
       
    77 		protected CellEditor getCellEditor(Object element) {
       
    78 			return editor;
       
    79 		}
       
    80 
       
    81 		@Override
       
    82 		protected Object getValue(Object element) {
       
    83 			ISBSv2BuildContext context = (ISBSv2BuildContext) element;
       
    84 			return context.getSBSv2Alias();
       
    85 		}
       
    86 
       
    87 		@Override
       
    88 		protected void setValue(Object element, Object value) {
       
    89 			if (value == null)
       
    90 				return;
       
    91 			
       
    92 			ISBSv2BuildContext context = (ISBSv2BuildContext) element;
       
    93 			
       
    94 			// TODO: Use real data. Here we can find an existing build context that works, or create a new one if a variant was applied
       
    95 			// We would need to run the query here to fill out extra params
       
    96 			String alias = value.toString();
       
    97 			String aliasTokens[] = alias.split("_");
       
    98 			String platform = aliasTokens[0].toUpperCase();
       
    99 			String target = aliasTokens[1].toUpperCase();
       
   100 			String displayName = platform + " " + target;
       
   101 			String configID = ISBSv2BuildContext.BUILDER_ID + "." + value.toString() +  "." + context.getSDK().getUniqueId();
       
   102 			ISBSv2BuildContext newContext = new BuildContextSBSv2(context.getSDK(), platform, target, alias, displayName, configID);
       
   103 
       
   104 			if (contextExists(newContext)){
       
   105 				return;
       
   106 			}
       
   107 			
       
   108 						// TODO: Handle edit and store data if alias changes
       
   109 			sbsBuildContexts.add(newContext);
       
   110 			sbsBuildContexts.remove(sbsBuildContexts.indexOf(context));
       
   111 			addBuildConfigurationTableItems();
       
   112 			getViewer().refresh();
       
   113 		}
       
   114 
       
   115 		private boolean contextExists(ISBSv2BuildContext context) {
       
   116 			for (ISBSv2BuildContext prefContext : sbsBuildContexts){
       
   117 				if (prefContext.equals(context)){
       
   118 					return true;
       
   119 				}
       
   120 			}
       
   121 			return false;
       
   122 		}
       
   123 	}
       
   124 	
       
   125 	private class BuildAliasCellEditor extends TextAndDialogCellEditor {
       
   126 		private Button button;
       
   127 		private Text text;
       
   128 
       
   129 		public BuildAliasCellEditor(Composite parent) {
       
   130 			super(parent);
       
   131 		}
       
   132 		
       
   133 		@Override
       
   134 		protected Control createControl(Composite parent) {
       
   135 			Control control = super.createControl(parent);
       
   136 			button = getButton();
       
   137 			button.setText("..."); //$NON-NLS-1$
       
   138 			return control;
       
   139 		}
       
   140 
       
   141 		@Override
       
   142 		protected Object openDialogBox(Control cellEditorWindow) {
       
   143 			DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
       
   144 			BrowseDialogUtils.initializeFrom(dialog, text);
       
   145 			return dialog.open();
       
   146 		}
       
   147 	}
       
   148 	
       
   149 	public SBSv2ConfigManager(Composite parent) {
       
   150 		super(parent, SWT.NONE);
       
   151 	}
       
   152 
       
   153 	public void createControls() {
       
   154 		GridLayout gridLayout = new GridLayout();
       
   155 		gridLayout.numColumns = 2;
       
   156 		setLayout(gridLayout);
       
   157 		
       
   158 		initData();
       
   159 		
       
   160 		sbsConfigTableViewer = CheckboxTableViewer.newCheckList(this, 
       
   161 				SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
       
   162 		createSBSConfigTable();
       
   163 	
       
   164 		addBuildConfigurationTableItems();	
       
   165 	}
       
   166 
       
   167 	private void initData() {
       
   168 		
       
   169 		////////////////////TODO: DUMMY DATA. GET FROM RAPTOR QUERY
       
   170 		globalBuildAliasList.add("armv5_udeb");
       
   171 		globalBuildAliasList.add("armv5_urel");
       
   172 		globalBuildAliasList.add("winscw_udeb");
       
   173 		globalBuildAliasList.add("winscw_urel");
       
   174 		globalBuildAliasList.add("tools2_deb");
       
   175 		globalBuildAliasList.add("tools2_rel");
       
   176 		/////////////////////
       
   177 		
       
   178 		/////// TODO: DUMMY SBSv2 BUILD CONTEXTS FOR TABLE
       
   179 		ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDKList().get(0);
       
   180 		
       
   181 		ISBSv2BuildContext testContext = new BuildContextSBSv2(sdk, "ARMV5", "DEBUG", "arvm5_udeb", "ARMV5 Debug", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb." + sdk.getUniqueId());
       
   182 		sbsBuildContexts.add(testContext);
       
   183 		
       
   184 		testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb." + sdk.getUniqueId());
       
   185 		sbsBuildContexts.add(testContext);
       
   186 		
       
   187 		testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel_gcce", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb_gcce." + sdk.getUniqueId());
       
   188 		sbsBuildContexts.add(testContext);
       
   189 		
       
   190 		testContext = new BuildContextSBSv2(sdk, "ARMV5", "Release", "arvm5_urel_gcce", "ARMV5 Release", ISBSv2BuildContext.BUILDER_ID + ".arvm5_udeb_gcce." + sdk.getUniqueId());
       
   191 		sbsBuildContexts.add(testContext);
       
   192 		
       
   193 		testContext = new BuildContextSBSv2(sdk, "WINSCW", "Release", "winscw_urel", "WINSCW Release", ISBSv2BuildContext.BUILDER_ID + ".winscw_urel." + sdk.getUniqueId());
       
   194 		sbsBuildContexts.add(testContext);
       
   195 		
       
   196 		testContext = new BuildContextSBSv2(sdk, "WINSCW", "Debug", "winsw_udeb", "WINSCW Debug", ISBSv2BuildContext.BUILDER_ID + ".winscw_udeb." + sdk.getUniqueId());
       
   197 		sbsBuildContexts.add(testContext);
       
   198 		
       
   199 		
       
   200 		
       
   201 		
       
   202 	}
       
   203 
       
   204 	private void createSBSConfigTable() {
       
   205 		final Table table = sbsConfigTableViewer.getTable();
       
   206 		GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
       
   207 		gridData.widthHint = 425;
       
   208 		gridData.heightHint = table.getItemHeight() * 10;
       
   209 		table.setLayoutData(gridData);
       
   210 		table.setHeaderVisible(true);
       
   211 		table.setLinesVisible(false);
       
   212 
       
   213 		
       
   214 		TableViewerColumn enabledCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT);
       
   215 		enabledCol.getColumn().setText("Enabled"); //$NON-NLS-1$
       
   216 		enabledCol.getColumn().setWidth(50);
       
   217 		
       
   218 		TableViewerColumn aliasCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT);
       
   219 		aliasCol.setEditingSupport(new BuildAliasEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$
       
   220 		aliasCol.getColumn().setText("SBS Configuration");
       
   221 		aliasCol.getColumn().setWidth(160);
       
   222 		
       
   223 		TableViewerColumn variantCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT);
       
   224 		//aliasCol.setEditingSupport(new IdEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$
       
   225 		variantCol.getColumn().setText("Product Variant");
       
   226 		variantCol.getColumn().setWidth(120);
       
   227 		
       
   228 		TableViewerColumn displaNameCol = new TableViewerColumn(sbsConfigTableViewer, SWT.LEFT);
       
   229 		//aliasCol.setEditingSupport(new IdEditingSupport(sbsConfigTableViewer)); //$NON-NLS-1$
       
   230 		displaNameCol.getColumn().setText("Display Name");
       
   231 		displaNameCol.getColumn().setWidth(160);
       
   232 		
       
   233 	}
       
   234 	
       
   235 	private void addBuildConfigurationTableItems() {
       
   236 		sbsConfigTableViewer.setLabelProvider(new SBSv2BuildContextLabelProvider());
       
   237 		sbsConfigTableViewer.setContentProvider(new ArrayContentProvider());
       
   238 		sbsContexts = getGlobalSBSContexts();
       
   239 		sbsConfigTableViewer.setInput(sbsContexts.toArray());
       
   240 		sbsConfigTableViewer.getTable().setToolTipText("TODO Tooltip"); //$NON-NLS-1$
       
   241 		setCheckedElements();
       
   242 //		addSDKTableViewerListeners();
       
   243 		if (sbsContexts == null || sbsContexts.size() == 0){
       
   244 //			statusError(Messages.getString("SDKPreferencePage.No_SDKs_Available_Message")); //$NON-NLS-1$
       
   245 		}
       
   246 	}
       
   247 
       
   248 	// TODO: Get context list from SDKManager for SBSv2
       
   249 	private List<ISBSv2BuildContext> getGlobalSBSContexts() {
       
   250 		
       
   251 		return sbsBuildContexts;
       
   252 	}
       
   253 
       
   254 	private void setCheckedElements() {
       
   255 		// TODO Auto-generated method stub
       
   256 		
       
   257 	}
       
   258 
       
   259 }