content: /**
   *  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.linter.internal.core;
  
  import java.util.Collection;
  import java.util.LinkedHashMap;
  import java.util.Map;
  
  import tern.eclipse.ide.linter.core.ITernLinterOption;
  import tern.utils.StringUtils;
  
  /**
   * Tern linter implementation.
   * 
   * @author azerr
   *
   */
  public class TernLinterOption implements ITernLinterOption {
  
  	private final String id;
  	private final String type;
  	private final String url;
  	private String doc;
  	private Object value;
  	private final Map<String, ITernLinterOption> options;
  
  	public TernLinterOption(String id, String type, String url) {
  		this.id = id;
  		this.type = type;
  		this.url = url;
  		this.options = new LinkedHashMap<String, ITernLinterOption>();
  	}
  
  	@Override
  	public String getId() {
  		return id;
  	}
  
  	public String getType() {
  		return type;
  	}
  
  	@Override
  	public String getUrl() {
  		return url;
  	}
  
  	@Override
  	public Collection<ITernLinterOption> getOptions() {
  		return options.values();
  	}
  
  	@Override
  	public void addOption(ITernLinterOption option) {
  		this.options.put(option.getId(), option);
  	}
  
  	public ITernLinterOption getOption(String id) {
  		return options.get(id);
  	}
  
  	@Override
  	public String getDoc() {
  		return doc;
  	}
  
  	public void setDoc(String doc) {
  		this.doc = doc;
  	}
  
  	@Override
  	public boolean isBooleanType() {
  		return "boolean".equals(getType());
  	}
  
  	@Override
  	public boolean isNumberType() {
  		return "number".equals(getType());
  	}
  
  	@Override
  	public boolean isStringType() {
  		return "string".equals(getType());
  	}
  
  	@Override
  	public boolean isCategoryType() {
  		return "category".equals(getType());
  	}
  
  	public boolean hasType() {
  		return !StringUtils.isEmpty(getType());
  	}
  
  	@Override
  	public void setValue(Object value) {
  		this.value = value;
  	}
  
  	@Override
  	public Object getValue() {
  		return value;
  	}
  
  	@Override
  	public boolean getBooleanValue() {
  		return hasValue() ? (Boolean) value : false;
  	}
  
  	@Override
  	public boolean hasValue() {
  		return value != null;
  	}
  
  	@Override
  	public Long getNumberValue() {
  		return hasValue() ? (Long) value : null;
  	}
  
  	@Override
  	public String getStringValue() {
  		return hasValue() ? (String) value : null;
  	}
  
  	@Override
  	public String toString() {
  		return hasValue() ? value.toString() : "";
  	}
  
  }
  