/** * Copyright (c) 2013-2016 Angelo ZERR. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.eclipse.ide.internal.ui.descriptors.options; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.ArrayContentProvider; 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.widgets.Composite; import org.eclipse.swt.widgets.Table; import tern.eclipse.ide.internal.ui.TernUIMessages; import tern.eclipse.ide.internal.ui.viewers.LintRulesLabelProvider; import tern.eclipse.ide.internal.ui.viewers.LintRulesSeverityEditingSupport; import tern.eclipse.ide.ui.descriptors.options.ITernModuleOptionFactory; import tern.eclipse.ide.ui.viewers.JsonContentProvider; import tern.metadata.TernModuleMetadataOption; import tern.server.protocol.JsonHelper; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; /** * String tern module option. * */ public class LintRulesTernModuleOptionFactory implements ITernModuleOptionFactory { @Override public void createOption(Composite parent, IProject project, TernModuleMetadataOption metadata, final JsonObject options) { List<LintRule> rules = createRules(metadata, options); // create UI final TableViewer viewer = new TableViewer(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI); // create rule column TableViewerColumn ruleColumn = new TableViewerColumn(viewer, SWT.NONE); ruleColumn.getColumn().setWidth(200); ruleColumn.getColumn().setResizable(true); ruleColumn .getColumn() .setText( TernUIMessages.LintRulesTernModuleOptionFactory_rules_ruleColumn); // create severity column TableViewerColumn severityColumn = new TableViewerColumn(viewer, SWT.NONE); severityColumn.getColumn().setWidth(100); severityColumn.getColumn().setResizable(true); severityColumn .getColumn() .setText( TernUIMessages.LintRulesTernModuleOptionFactory_rules_severityColumn); severityColumn.setEditingSupport(new LintRulesSeverityEditingSupport( viewer)); Table table = viewer.getTable(); GridData data = new GridData(GridData.FILL_BOTH); data.widthHint = 350; table.setLayoutData(data); table.setFont(parent.getFont()); table.setHeaderVisible(true); table.setLinesVisible(false); viewer.setLabelProvider(LintRulesLabelProvider.getInstance()); viewer.setContentProvider(ArrayContentProvider.getInstance()); viewer.setInput(rules); } private List<LintRule> createRules(TernModuleMetadataOption metadata, JsonObject options) { JsonObject rulesOption = (JsonObject) options.get("rules"); if (rulesOption == null) { rulesOption = new JsonObject(); options.set("rules", rulesOption); } List<LintRule> rules = new ArrayList<LintRule>(); JsonArray defaultRules = (JsonArray) metadata.getJsonObject().get( "values"); for (Iterator<JsonValue> iterator = defaultRules.iterator(); iterator .hasNext();) { JsonObject defaultRule = (JsonObject) iterator.next(); rules.add(new LintRule(defaultRule, rulesOption)); } return rules; } }