All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hudsonci.utils.plugin.ui.UIComponentSupport Maven / Gradle / Ivy

/*******************************************************************************
 *
 * Copyright (c) 2010-2011 Sonatype, Inc.
 *
 * 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: 
 *
 *   
 *     
 *
 *******************************************************************************/ 

package org.hudsonci.utils.plugin.ui;

import org.hudsonci.inject.internal.plugin.PluginClassLoader;

import hudson.PluginWrapper;
import hudson.model.Action;
import hudson.model.Hudson;
import hudson.security.Permission;
import org.kohsuke.stapler.Ancestor;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

import static com.google.common.base.Preconditions.checkState;

/**
 * Support for UI components.
 *
 * @author Jason Dillon
 * @since 2.1.0
 */
public abstract class UIComponentSupport

implements Action { protected final Logger log = LoggerFactory.getLogger(getClass()); protected final P parent; protected UIComponentSupport(final P parent) { this.parent = parent; } protected UIComponentSupport() { this(null); } public P getParent() { return parent; } /** * Returns our parent's icon. */ public String getIconFileName() { if (parent != null) { return getParent().getIconFileName(); } return null; } // @Override // public String getDisplayName() { // if (parent != null) { // return getParent().getDisplayName(); // } // return null; // } protected String getIconFileName(final String name) { assert name != null; // This path is relative to the context path, not root return String.format("/plugin/%s/images/%s", getPluginName(), name); } /** * No URL. */ public String getUrlName() { return null; } // FIXME: Sync up with PluginUtil helpers /** * Returns the {@link PluginWrapper} for the current class context. * * @throws IllegalStateException Unable to determine plugin wrapper source. */ protected PluginWrapper getPluginWrapper() { ClassLoader cl = getClass().getClassLoader(); if (cl instanceof PluginClassLoader) { return ((PluginClassLoader)cl).getPlugin(); } throw new IllegalStateException(); } @JellyAccessible public String getRootPath() { StaplerRequest req = Stapler.getCurrentRequest(); checkState(req != null, "StaplerRequest not bound"); return req.getContextPath(); } @JellyAccessible public String getPluginName() { return getPluginWrapper().getShortName(); } @JellyAccessible public String getPluginPath() { return String.format("%s/plugin/%s", getRootPath(), getPluginName()); } @JellyAccessible public String getImagesPath() { return String.format("%s/images", getPluginPath()); } @JellyAccessible public String getHelpPath() { // Help path is relative to the context path, not root return String.format("/plugin/%s/help", getPluginName()); } @JellyAccessible public String getIconPath() { String iconPath = getIconFileName(); if (iconPath.startsWith("/")) { iconPath = iconPath.substring(1, iconPath.length()); } return String.format("%s/%s", getRootPath(), iconPath); } /** * The object which owns the sidepanel.jelly view. */ @JellyAccessible public Object getSidePanelOwner() { if (parent instanceof UIComponentSupport) { return ((UIComponentSupport)parent).getSidePanelOwner(); } return parent; } // // TODO: Add getBaseUrl() which should end up similar to getSidePanelOwner().getUrlName() // /** * The permission needed to render the components view. */ @JellyAccessible public Permission getViewPermission() { return Hudson.READ; } @JellyAccessible public String getPageTitle() { return getDisplayName(); } protected void checkPermission(final Permission perm) { // TODO: inject Hudson.getInstance().checkPermission(perm); } protected void redirect(final StaplerRequest req, final StaplerResponse resp, final String location) throws IOException { log.trace("Redirecting to: {}", location); resp.sendRedirect(location); } protected void redirectAncestor(final StaplerRequest req, final StaplerResponse resp, final Class type) throws IOException { log.trace("Redirect ancestor: {}", type); redirect(req, resp, req.findAncestor(type).getUrl()); } protected void redirectAncestor(final StaplerRequest req, final StaplerResponse resp, final Object obj) throws IOException { log.trace("Redirect ancestor: {}", obj); Ancestor ancestor = req.findAncestor(obj); redirect(req, resp, ancestor.getUrl()); } protected void redirectParent(final StaplerRequest req, final StaplerResponse resp) throws IOException { redirectAncestor(req, resp, getParent()); } protected void redirectSelf(final StaplerRequest req, final StaplerResponse resp) throws IOException { redirectAncestor(req, resp, this); } @JellyAccessible public String getBaseRestURI() { return String.format("%s/rest/plugin/%s", getRootPath(), getPluginName()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy