components/visual-panels/core/src/java/vpanels/panel/com/oracle/solaris/vp/panel/common/action/DefaultStructuredAction.java
changeset 3553 f1d133b09a8c
parent 3552 077ebe3d0d24
child 3554 ef58713bafc4
--- a/components/visual-panels/core/src/java/vpanels/panel/com/oracle/solaris/vp/panel/common/action/DefaultStructuredAction.java	Tue Dec 16 05:53:51 2014 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- */
-
-package com.oracle.solaris.vp.panel.common.action;
-
-import java.awt.EventQueue;
-import java.util.logging.Logger;
-import javax.swing.JOptionPane;
-import com.oracle.solaris.vp.panel.common.*;
-import com.oracle.solaris.vp.panel.common.api.auth.*;
-import com.oracle.solaris.vp.util.misc.*;
-import com.oracle.solaris.vp.util.misc.finder.Finder;
-
-/**
- * The {@code DefaultStructuredAction} is a {@link StructuredAction} that uses a
- * {@link ClientContext} to handle errors and show a busy indicator while work
- * is being done.
- * <p/>
- * Subclasses should implement {@link #workBusy}, and optionally {@link
- * #getRuntimeInput} if they need to interact with the user prior to running.
- */
-public class DefaultStructuredAction<P, I, O>
-    extends StructuredAction<P, I, O> {
-
-    //
-    // Instance data
-    //
-
-    private ClientContext context;
-
-    //
-    // Constructors
-    //
-
-    public DefaultStructuredAction(String text, P pInput,
-	ClientContext context) {
-
-	super(text, pInput);
-	this.context = context;
-    }
-
-    public DefaultStructuredAction(String text, ClientContext context) {
-	this(text, null, context);
-    }
-
-    //
-    // StructuredAction methods
-    //
-
-    /**
-     * Calls {@link #setBusyAndWork}, then catches, displays, and re-throws any
-     * resulting {@link ActionFailedException}s, and catches any resulting
-     * {@link ActionUnauthorizedException}s and prompts the user to change his
-     * login before retrying.
-     * <p>
-     * Note: See {@link #setBusyAndWork} for the note about calling this method
-     * on the Swing event thread.
-     *
-     * @param	    pInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @param	    rtInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @return	    see {@link StructuredAction#work}
-     *
-     * @exception   ActionAbortedException
-     *		    thrown by {@link #setBusyAndWork} or {@link
-     *		    ClientContext#login}
-     *
-     * @exception   ActionFailedException
-     *		    see {@link StructuredAction#work}
-     */
-    @Override
-    public O work(P pInput, I rtInput) throws ActionAbortedException,
-	ActionFailedException {
-
-	LoginRequest request = null;
-
-	while (true) {
-	    try {
-		if (request != null) {
-		    try {
-			context.login(request, false);
-		    } finally {
-			request = null;
-		    }
-		}
-
-		return setBusyAndWork(pInput, rtInput);
-
-	    } catch (ActionFailedException e) {
-		showError(e);
-		throw e;
-
-	    } catch (ActionUnauthorizedException e) {
-		String eMessage = e.getMessage();
-		if (eMessage == null) {
-		    eMessage = Finder.getString("error.server.permission");
-		}
-
-		String userVal = null;
-		String roleVal = null;
-
-		// Prioritize users over roles (more user-friendly)
-		PrincipalHintList hints = e.getHints();
-		UserHint uhint = hints.getFirstHint(UserHint.class);
-		if (uhint != null) {
-		    userVal = uhint.getUsername();
-		} else {
-		    RoleHint rhint = hints.getFirstHint(RoleHint.class);
-		    if (rhint != null) {
-			roleVal = rhint.getRolename();
-		    }
-		}
-
-		// Log in with a different user/role and try again
-		ConnectionInfo info = context.getConnectionInfo();
-		LoginProperty<String> host =
-		    new LoginProperty<String>(info.getHost(), false);
-		LoginProperty<String> user =
-		    new LoginProperty<String>(userVal != null ?
-		    userVal : info.getUser(), true);
-		LoginProperty<String> role =
-		    new LoginProperty<String>(roleVal != null ?
-		    roleVal : info.getRole(), true);
-
-		DialogMessage message = new DialogMessage(
-		    eMessage, JOptionPane.WARNING_MESSAGE);
-
-		request = new LoginRequest(host, user, role, message);
-	    }
-	}
-    }
-
-    //
-    // DefaultStructuredAction methods
-    //
-
-    public ClientContext getClientContext() {
-	return context;
-    }
-
-    /**
-     * Sets the busy state of this {@code DefaultStructuredAction}'s {@link
-     * ClientContext}, then calls {@link #workBusy}, preventing the user from
-     * interacting with the application until {@link #workBusy} is complete.
-     * <p>
-     * Note: in a Swing context, this method should not be called on the event
-     * thread, since a) it calls {@link #workBusy} which may perform intensive
-     * non-UI work, and b) it displays the {@link ClientContext#getBusyIndicator
-     * ClientContext's busy indicator}, which may invoke UI effects that would
-     * not be displayed until after this method is done (when the event thread
-     * is free).
-     *
-     * @param	    pInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @param	    rtInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @return	    see {@link StructuredAction#work}
-     *
-     * @exception   ActionAbortedException
-     *		    see {@link StructuredAction#work}
-     *
-     * @exception   ActionFailedException
-     *		    see {@link StructuredAction#work}
-     *
-     * @exception   ActionUnauthorizedException
-     *		    see {@link #workBusy}
-     */
-    public O setBusyAndWork(P pInput, I rtInput) throws ActionAbortedException,
-	ActionFailedException, ActionUnauthorizedException {
-
-	assert (!EventQueue.isDispatchThread());
-
-	context.getBusyIndicator().setBusyIndicatorDisplayed(true);
-
-	try {
-	    return workBusy(pInput, rtInput);
-	} finally {
-	    context.getBusyIndicator().setBusyIndicatorDisplayed(false);
-	}
-    }
-
-    protected void setClientContext(ClientContext context) {
-	this.context = context;
-    }
-
-    /**
-     * Handles {@link ActionFailedException}s thrown by {@link #work}.
-     * <p/>
-     * This default implementation logs ({@code Level.FINE}) the error to the
-     * {@link ClientContext} log.
-     */
-    protected void showError(ActionFailedException e) {
-	Logger.getLogger(getClass().getPackage().getName()).fine(
-	    ThrowableUtil.getTrueMessage(e));
-    }
-
-    /**
-     * Does the core work of this action.
-     * <p>
-     * This default implementation does nothing and returns {@code null}.
-     *
-     * @param	    pInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @param	    rtInput
-     *		    see {@link StructuredAction#work}
-     *
-     * @return	    see {@link StructuredAction#work}
-     *
-     * @exception   ActionAbortedException
-     *		    see {@link StructuredAction#work}
-     *
-     * @exception   ActionFailedException
-     *		    see {@link StructuredAction#work}
-     *
-     * @exception   ActionUnauthorizedException
-     *		    if the current user has insufficient privileges for this
-     *		    operation
-     */
-    public O workBusy(P pInput, I rtInput)
-	throws ActionAbortedException, ActionFailedException,
-	ActionUnauthorizedException {
-
-	return null;
-    }
-}