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.server;
  
  /**
   * Tern module information.
   *
   */
  public class TernModuleInfo implements ITernModuleInfo {
  
  	private final String name;
  	private final String type;
  	private final String version;
  
  	public TernModuleInfo(String name) {
  		int index = getVersionIndex(name);
  		this.name = name;
  		if (index != -1) {
  			type = name.substring(0, index);
  			version = name.substring(index, name.length());
  		} else {
  			type = name;
  			version = null;
  		}
  	}
  
  	public TernModuleInfo(TernModuleInfo info) {
  		this.name = info.getName();
  		this.type = info.getType();
  		this.version = info.getVersion();
  	}
  
  	private static int getVersionIndex(String name) {
  		char[] chars = name.toCharArray();
  		for (int i = 0; i < chars.length; i++) {
  			if (Character.isDigit(chars[i])) {
  				return i;
  			}
  		}
  		return -1;
  	}
  
  	@Override
  	public String getName() {
  		return name;
  	}
  
  	@Override
  	public String getType() {
  		return type;
  	}
  
  	@Override
  	public String getVersion() {
  		return version;
  	}
  
  	@Override
  	public boolean equals(Object o) {
  		if ((o instanceof ITernModuleInfo)) {
  			ITernModuleInfo module = (ITernModuleInfo) o;
  			return (equals(name, module.getName()) && equals(type, module.getType())
  					&& equals(version, module.getVersion()));
  		}
  		return false;
  	}
  
  	private boolean equals(Object o1, Object o2) {
  		if (o1 == null) {
  			return (o2 == null);
  		}
  		return o1.equals(o2);
  	}
  }
  