/** * * Copyright (C) norad.fr * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package fr.norad.visuwall.plugin.demo; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Random; import fr.norad.visuwall.api.domain.BuildState; import fr.norad.visuwall.api.domain.BuildTime; import fr.norad.visuwall.api.domain.Commiter; import fr.norad.visuwall.api.domain.SoftwareProjectId; import org.joda.time.DateTime; public class ChangeStateProject { public class Build { BuildState buildState; String buildId; List<Commiter> commiters; BuildTime buildTime; private boolean building = true; } private List<Build> builds = new ArrayList<Build>(); private final SoftwareProjectId projectId; public ChangeStateProject() { this(null); } public ChangeStateProject(SoftwareProjectId projectId) { this.projectId = projectId; Build build = generateNewBuild(); updateBuildAfterBuilding(build); generateNewBuild(); } //////////////// boolean isBuilding(boolean notBuildingTime) { Build lastBuild = getlastBuild(); if (notBuildingTime) { if (lastBuild.building) { updateBuildAfterBuilding(lastBuild); } } else if (!lastBuild.building) { Build newBuild = generateNewBuild(); return newBuild.building; } return lastBuild.building; } private void updateBuildAfterBuilding(Build build) { //state int stateIndex = (int) (Math.random() * (((BuildState.values().length - 1) - 0) + 1)); build.buildState = BuildState.values()[stateIndex]; build.buildTime.setDuration((new Date().getTime() - build.buildTime.getStartTime().getTime())); build.building = false; } private Build generateNewBuild() { String lastBuildId = "0"; if (builds.size() > 0) { lastBuildId = getlastBuild().buildId; } Build build = new Build(); build.buildId = String.valueOf(Integer.valueOf(lastBuildId) + 1); // commiters build.commiters = new ArrayList<Commiter>(); if (new Random().nextBoolean()) { Commiter alemaire = new Commiter("alemaire"); alemaire.setEmail("alemaire@xebia.fr"); build.commiters.add(alemaire); } if (new Random().nextBoolean()) { Commiter jsmadja = new Commiter("jsmadja"); jsmadja.setEmail("jsmadja@xebia.fr"); build.commiters.add(jsmadja); } // BuildTime build.buildTime = new BuildTime(); build.buildTime.setStartTime(new Date()); build.building = true; builds.add(build); return build; } private Build getBuildFromId(String buildId) { for (Build build : builds) { if (buildId.equals(build.buildId)) { return build; } } return null; } private Build getlastBuild() { return builds.get(builds.size() - 1); } ////////////////////// public boolean isBuilding() { return isBuilding(Calendar.getInstance().get(Calendar.SECOND) < 30); } // TODO should be in build public Date estimatedFinishTime() { return new DateTime(getlastBuild().buildTime.getStartTime()).plusMinutes(1).toDate(); } public SoftwareProjectId getProjectId() { return projectId; } public String getLastBuildId() { return getlastBuild().buildId; } public List<Commiter> getCommiters(String buildId) { return getBuildFromId(buildId).commiters; } public BuildTime getBuildTime(String buildId) { return getBuildFromId(buildId).buildTime; } public List<String> getbuildIds() { ArrayList<String> arrayList = new ArrayList<String>(); for (Build build : builds) { arrayList.add(build.buildId); } return arrayList; } public BuildState getBuildState(String buildId) { return getBuildFromId(buildId).buildState; } }