/* * ConcreteSplitViewer program for analazing splits. * Copyright (C) 2006-2007 Mytinski Leonid (Leonid.Mytinski@gmail.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ /* * Distance.java * * Created on 27 Июнь 2006 г., 19:28 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package ru.concretesoft.concretesplitviewer; import java.util.ArrayList; import java.util.List; /** * * @author Mytinski Leonid * * Класс описывающий дистанцию */ public class Distance { private String name; private int length; private int numberOfCP; // private int[] lengths; private Lap[] laps; private List<Group> groups; /** Creates a new instance of Distance * * @param name название дистанции (обычно название группы) * @param length длина дистанции * @param numberOfCP количество пунктов * @param lengths массив содержащий длины перегонов * */ public Distance(String name, int length, int numberOfCP, int[] lengths) { this(name, length, numberOfCP, lengths, null); } public Distance(String name, int length, int numberOfCP, int[] lengths, int[] cPsNumbers){ this.name = name; this.length = length; // this.lengths = lengths; this.numberOfCP = numberOfCP; laps = new Lap[numberOfCP]; if((lengths!=null)&&(cPsNumbers!=null)&&(lengths.length==cPsNumbers.length)){ laps[0] = new Lap(Lap.START_CONTROL_POINT, cPsNumbers[0], lengths[0]); for(int i = 1; i < lengths.length; i++){ laps[i] = new Lap(cPsNumbers[i-1], cPsNumbers[i], lengths[i]); } } else if(lengths!=null){ setLengthsOfDists(lengths); } groups = new ArrayList<Group>(); } public Distance(String name, int length, int numberOfCP){ this(name, length, numberOfCP, null, null); } /* * Метод возвращает название дистанции. */ public String getName(){ return name; } /* * Метод устанавливает название дистанции. */ public void setName(String n){ name = n; } /* * Метод возвращает длину дистанции. */ public int getLength(){ return length; } /* * Метод возвращает количество пунктов */ public int getNumberOfCP(){ return numberOfCP; } /* * Метод возвращает длину перегона на пункт n * Method return lenght of laps with number <code>n</code>. n=1 means distance from start to first control point * * @return lenght of distance from <code>n-1</code>th to <code>n</code>th control point. If distance has no lenghts of laps returned -1. * * @param n lenght of what lap should be returned (n=1 means distance from start to first control point) * */ public int getLengthOfDist(int n){ if(laps[n-1]==null) return -1; return laps[n-1].getLength(); } /* * Метод устанавливает длину перегона на пункт n равной l. */ public void setLengthOfDist(int n, int l){ if(laps[n-1]==null) { laps[n-1] = new Lap(l); } else { laps[n-1].setLength(l); } } /** Method for set all lengths of laps. * * @param ls array of lengths * * @return <code>true</code> if set lengths. <code>false</code> if length of array not equals with number of control points in distance */ public boolean setLengthsOfDists(int[] ls){ if((ls==null)||(ls.length != getNumberOfCP())) return false; else{ for(int i=0; i < ls.length; i++) setLengthOfDist(i+1, ls[i]); } return true; } public void removeGroup(Group g){ groups.remove(g); } /* * Метод добовляет группу к дистанции. */ public void addGroup(Group g){ if(!groups.contains(g)) groups.add(g); else; } /* * Метод устанавливает набор групп для этой дистанции */ public void setGroups(List<Group> grs){ groups = new ArrayList<Group>(grs); } /* * Метод возвращает все группы принадлижащие этой дистанции. */ public List<Group> getGroups(){ return new ArrayList<Group>(groups); } /* * Метод сравнивает эту дистанцию с дистанцией d */ public boolean equals(Distance d){ return (getLength() == d.getLength()) && (getNumberOfCP() == d.getNumberOfCP()); } }