package hudson.plugins.mantis; import hudson.Util; import hudson.model.AbstractProject; import hudson.plugins.mantis.model.MantisIssue; import hudson.plugins.mantis.model.MantisNote; import hudson.plugins.mantis.model.MantisViewState; import hudson.plugins.mantis.soap.MantisSession; import hudson.plugins.mantis.soap.MantisSessionFactory; import java.net.MalformedURLException; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import org.kohsuke.stapler.DataBoundConstructor; /** * Reperesents an external Mantis installation and configuration needed to access this * Mantis. * * @author Seiji Sogabe */ public final class MantisSite { /** * the root URL of Mantis installation. */ private final URL url; /** * MantisVersion of Mantis. */ private MantisVersion version = MantisVersion.V110; /** * user name for Mantis installation. */ private final String userName; /** * password for Mantis installation. */ private final String password; /** * user name for Basic Authentication. */ private final String basicUserName; /** * password for Basic Authentication. */ private final String basicPassword; public static MantisSite get(final AbstractProject<?, ?> p) { final MantisProjectProperty mpp = p.getProperty(MantisProjectProperty.class); if (mpp != null) { final MantisSite site = mpp.getSite(); if (site != null) { return site; } } final MantisSite[] sites = MantisProjectProperty.DESCRIPTOR.getSites(); if (sites.length == 1) { return sites[0]; } return null; } public URL getUrl() { return url; } public MantisVersion getVersion() { return version; } public String getUserName() { return userName; } public String getPassword() { return password; } public String getName() { return url.toExternalForm(); } public String getBasicUserName() { return basicUserName; } public String getBasicPassword() { return basicPassword; } @DataBoundConstructor public MantisSite(final URL url, final String version, final String userName, final String password, final String basicUserName, final String basicPassword) { if (!url.toExternalForm().endsWith("/")) { try { this.url = new URL(url.toExternalForm() + '/'); } catch (final MalformedURLException e) { throw new AssertionError(e); } } else { this.url = url; } this.version = MantisVersion.getVersionSafely(version, MantisVersion.V110); this.userName = Util.fixEmptyAndTrim(userName); this.password = Util.fixEmptyAndTrim(password); this.basicUserName = Util.fixEmptyAndTrim(basicUserName); this.basicPassword = Util.fixEmptyAndTrim(basicPassword); } public boolean isConnect() { final String urlString = url.toExternalForm(); try { final MantisSession session = createSession(); final String v = session.getVersion(); LOGGER.info(Messages.MantisSite_DetectedVersion(v)); } catch (final MantisHandlingException e) { LOGGER.log(Level.WARNING, Messages.MantisSite_FailedToConnectToMantis(urlString, e.getMessage())); return false; } LOGGER.log(Level.INFO, Messages.MantisSite_SucceedInConnectingToMantis(urlString)); return true; } public MantisIssue getIssue(final int id) throws MantisHandlingException { final MantisSession session = createSession(); return session.getIssue(id); } public void updateIssue(final int id, final String text, final boolean keepNotePrivate) throws MantisHandlingException { final MantisViewState viewState = keepNotePrivate ? MantisViewState.PRIVATE : MantisViewState.PUBLIC; final MantisNote note = new MantisNote(text, viewState); final MantisSession session = createSession(); session.addNote(id, note); } private MantisSession createSession() throws MantisHandlingException { return MantisSessionFactory.getSession(this); } public enum MantisVersion { /** * 1.1.X. */ V110(Messages.MantisSite_MantisVersion_V110()), /** * 1.2.0a4 and later. */ V120(Messages.MantisSite_MantisVersion_V120()); private final String displayName; private MantisVersion(final String displayName) { this.displayName = displayName; } public static MantisVersion getVersionSafely(final String version, final MantisVersion def) { MantisVersion ret = def; for (final MantisVersion v : MantisVersion.values()) { if (v.name().equalsIgnoreCase(version)) { ret = v; break; } } return ret; } public String getDisplayName() { return displayName; } } private static final Logger LOGGER = Logger.getLogger(MantisSite.class.getName()); }