Java tutorial
/****************************************************************************** * Copyright (c) 2014 Masatomi KINO and others. * 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: * Masatomi KINO - initial API and implementation * $Id$ ******************************************************************************/ //??: 2015/10/22 package nu.mine.kino.jenkins.plugins.projectmanagement.tokenmacros; import hudson.AbortException; import hudson.Extension; import hudson.model.TaskListener; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.Descriptor; import hudson.model.FreeStyleProject; import hudson.tasks.Builder; import hudson.util.DescribableList; import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.List; import nu.mine.kino.entity.Project; import nu.mine.kino.jenkins.plugins.projectmanagement.PMConstants; import nu.mine.kino.jenkins.plugins.projectmanagement.HigawariCheckBuilder; import nu.mine.kino.jenkins.plugins.projectmanagement.HigawariCheckBuilder.EnableTextBlock; import nu.mine.kino.jenkins.plugins.projectmanagement.utils.PMUtils; import nu.mine.kino.projects.JSONProjectCreator; import nu.mine.kino.projects.ProjectException; import nu.mine.kino.projects.utils.ProjectUtils; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateUtils; import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; /** * @author Masatomi KINO * @version $Revision$ */ @Extension public class HigawariCheckResultsTokenMacro extends DataBoundTokenMacro { @Override public boolean acceptsMacroName(String macroName) { return macroName.equals("HIGAWARI_CHECK_RESULTS"); } @Override public String evaluate(AbstractBuild<?, ?> context, TaskListener listener, String macroName) throws MacroEvaluationException, IOException, InterruptedException { EnableTextBlock useFilter = null; String targetProjects = null; // TockeMacro?A??ov?WFNg // (?AFreeStyleProject HigawariCheckBuilder?) // ?HigawariCheckBuilder??B AbstractProject p = context.getProject(); if (p instanceof FreeStyleProject) { FreeStyleProject fProject = (FreeStyleProject) p; DescribableList<Builder, Descriptor<Builder>> buildersList = fProject.getBuildersList(); HigawariCheckBuilder builder = buildersList.get(HigawariCheckBuilder.class); if (builder != null) { useFilter = builder.getUseFilter(); targetProjects = builder.getTargetProjects(); } } // ?Av?WFNg???A???B List<AbstractProject<?, ?>> projects = null; if (useFilter == null) { projects = PMUtils.findProjectsWithEVMToolsBuilder(); } else { String[] targetProjectsArray = targetProjects.split("\n"); projects = PMUtils.findProjectsWithEVMToolsBuilder(targetProjectsArray); } StringBuffer buf = new StringBuffer(); for (AbstractProject<?, ?> project : projects) { File newBaseDateFile = PMUtils.findBaseDateFile(project); // buildDir?Vt@C if (newBaseDateFile != null) { Date baseDateFromBaseDateFile = ProjectUtils.createDateData(newBaseDateFile); String dateStr = DateFormatUtils.format(baseDateFromBaseDateFile, "yyyy/MM/dd"); if (checkNextTradingDate(project, PMUtils.findProjectFileName(project))) {// buf.append("?~"); } else { buf.append("?"); } String msg = String.format("\t%s\t%s", project.getName(), dateStr); buf.append(msg); } else { String msg = String.format("?~\t%s\t??{?A" + "??[NXy?[X?o?[Wt@C??B" + "??{?At@C?B", project.getName()); buf.append(msg); } buf.append("\n"); } String message = new String(buf); return message; } /** * EVMXPW?[t@C?c?A?ttrue/false * ??true?B??false * * @param listener * @param jenkinsProject * @param builder * @return * @throws IOException * @throws AbortException */ private boolean checkNextTradingDate(AbstractProject<?, ?> jenkinsProject, String evmFileName) throws IOException, AbortException { String evmJSONFileName = ProjectUtils.findJSONFileName(evmFileName); AbstractBuild<?, ?> newestBuild = PMUtils.findNewestBuild(jenkinsProject); File newestJsonFile = new File(newestBuild.getRootDir(), evmJSONFileName + "." + PMConstants.TMP_EXT); System.out.println(newestJsonFile.getAbsolutePath()); try { Project evmProject = new JSONProjectCreator(newestJsonFile).createProject(); Date nextTradingDate = ProjectUtils.nextTradingDate(evmProject); Date now = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH); System.out.println(DateFormatUtils.format(nextTradingDate, "yyyyMMdd")); System.out.println(DateFormatUtils.format(now, "yyyyMMdd")); boolean before = nextTradingDate.before(now); System.out.println(before); return before; } catch (ProjectException e) { throw new AbortException(e.getMessage()); } // } }