Package com.webobjects.monitor.application

Source Code of com.webobjects.monitor.application.AdminApplicationsPage

package com.webobjects.monitor.application;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;

import com.webobjects.appserver.WOApplication;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.monitor._private.MApplication;
import com.webobjects.monitor._private.MHost;
import com.webobjects.monitor._private.MInstance;
import com.webobjects.monitor._private.MObject;
import com.webobjects.monitor._private.String_Extensions;

public class AdminApplicationsPage extends ApplicationsPage {

    public static final String DISPLAY_NAME = "displayName";

    public static final String ACTION_NAME = "actionName";

    protected static NSArray _actions;

    public NSArray actions;

    public NSDictionary selectedAction;

    public NSDictionary currentActionItem;

    protected NSMutableArray processedHosts;

    protected NSMutableArray processedInstances;

    static {
        try {
            Class c = AdminApplicationsPage.class;
            Class aclass[] = { com.webobjects.foundation.NSArray.class };
            String[] keys = new String[] { DISPLAY_NAME, ACTION_NAME };
            _actions = new NSArray(new NSDictionary[] {
                    new NSDictionary(new Object[] { "Start", c.getMethod("start", aclass) }, keys),
                    new NSDictionary(new Object[] { "Stop", c.getMethod("stop", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Auto Recover on for", c.getMethod("turnAutoRecoverOn", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Auto Recover off for", c.getMethod("turnAutoRecoverOff", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Refuse New Sessions on for", c.getMethod("turnRefuseNewSessionsOn", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Refuse New Sessions off for", c.getMethod("turnRefuseNewSessionsOff", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Scheduled on for", c.getMethod("turnScheduledOn", aclass) }, keys),
                    new NSDictionary(new Object[] { "Turn Scheduled off for", c.getMethod("turnScheduledOff", aclass) }, keys),
                    new NSDictionary(new Object[] { "Force Quit", c.getMethod("forceQuit", aclass) }, keys)
            });
        } catch (NoSuchMethodException nosuchmethodexception) {
            nosuchmethodexception.printStackTrace();
        }
    }
   
    public AdminApplicationsPage(WOContext context) {
        super(context);
        actions = _actions;
        processedHosts = new NSMutableArray();
        processedInstances = new NSMutableArray();
    }

    protected void processedInstance(MInstance minstance) {
        processedInstances.addObject(minstance);
        processedHosts.addObject(minstance.host());
    }

    protected void cleanup() {
        processedInstances.removeAllObjects();
        processedHosts.removeAllObjects();
    }

    protected void sendUpdateInstancesToWotaskds() {
        if (processedInstances.count() > 0) {
            handler().sendUpdateInstancesToWotaskds(processedInstances, processedHosts);
        }
        cleanup();
    }

    protected void sendCommandInstancesToWotaskds(String s) {
        if (processedInstances.count() > 0) {
            handler().sendCommandInstancesToWotaskds(s, processedInstances, processedHosts);
        }
        cleanup();
    }

    public void clearDeaths(NSArray nsarray) {
        MInstance minstance;
        for (Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements(); ) {
            minstance = (MInstance) enumeration.nextElement();
            processedInstance(minstance);
        }
        sendCommandInstancesToWotaskds("CLEAR");
    }

    public void scheduleType(NSArray nsarray, String scheduleType) {
        // Should be one of "HOURLY", "DAILY", "WEEKLY"
    for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
      MInstance minstance = (MInstance) enumeration.nextElement();
      minstance.setSchedulingType(scheduleType);
      processedInstance(minstance);
    }
    sendUpdateInstancesToWotaskds();
    }
   
    public void hourlyStartHours(NSArray nsarray, int beginScheduleWindow, int endScheduleWindow, int interval) {
        int hour = beginScheduleWindow;
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
          if (hour > endScheduleWindow)
            hour = beginScheduleWindow;
          MInstance minstance = (MInstance) enumeration.nextElement();
          minstance.setSchedulingHourlyStartTime(Integer.valueOf(hour));
          minstance.setSchedulingInterval(Integer.valueOf(interval));
          processedInstance(minstance);
          hour++;
        }
        sendUpdateInstancesToWotaskds();
    }
   
    public void dailyStartHours(NSArray nsarray, int beginScheduleWindow, int endScheduleWindow) {
        int hour = beginScheduleWindow;
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            if (hour > endScheduleWindow)
                hour = beginScheduleWindow;
            MInstance minstance = (MInstance) enumeration.nextElement();
            minstance.setSchedulingDailyStartTime(Integer.valueOf(hour));
            processedInstance(minstance);
            hour++;
        }
        sendUpdateInstancesToWotaskds();
    }
   
    public void weeklyStartHours(NSArray nsarray, int beginScheduleWindow, int endScheduleWindow, int startDay) {
    int hour = beginScheduleWindow;
    for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
      if (hour > endScheduleWindow)
        hour = beginScheduleWindow;
      MInstance minstance = (MInstance) enumeration.nextElement();
      minstance.setSchedulingWeeklyStartTime(Integer.valueOf(hour));
      minstance.setSchedulingStartDay(Integer.valueOf(startDay));
      processedInstance(minstance);
      hour++;
    }
    sendUpdateInstancesToWotaskds();
}

    public void turnScheduledOn(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (!minstance.isScheduled()) {
                minstance.setSchedulingEnabled(Boolean.TRUE);
                processedInstance(minstance);
            }
        }
        sendUpdateInstancesToWotaskds();
    }

    public void turnScheduledOff(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.isScheduled()) {
                minstance.setSchedulingEnabled(Boolean.FALSE);
                processedInstance(minstance);
            }
        }
        sendUpdateInstancesToWotaskds();
    }

    public void turnRefuseNewSessionsOn(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (!minstance.isRefusingNewSessions()) {
                minstance.setRefusingNewSessions(true);
                processedInstance(minstance);
            }
        }
        sendCommandInstancesToWotaskds("REFUSE");
    }

    public void turnRefuseNewSessionsOff(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.isRefusingNewSessions()) {
                minstance.setRefusingNewSessions(false);
                processedInstance(minstance);
            }
        }
        sendCommandInstancesToWotaskds("ACCEPT");
    }

    public void turnAutoRecoverOn(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.autoRecover() == null
                    || !minstance.autoRecover().booleanValue()) {
                minstance.setAutoRecover(Boolean.TRUE);
                processedInstance(minstance);
            }
        }
        sendUpdateInstancesToWotaskds();
    }

    public void turnAutoRecoverOff(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.autoRecover() != null
                    && minstance.autoRecover().booleanValue()) {
                minstance.setAutoRecover(Boolean.FALSE);
                processedInstance(minstance);
            }
        }
        sendUpdateInstancesToWotaskds();
    }

    public void forceQuit(NSArray nsarray) {
        MInstance minstance;
        for (Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            minstance = (MInstance) enumeration.nextElement();
            minstance.state = MObject.STOPPING;
            processedInstance(minstance);
        }
        sendCommandInstancesToWotaskds("QUIT");
    }

    public void stop(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.state == MObject.ALIVE
                    || minstance.state == MObject.STARTING) {
                minstance.state = MObject.STOPPING;
                processedInstance(minstance);
            }
        }
        sendCommandInstancesToWotaskds("STOP");
    }

    public void start(NSArray nsarray) {
        for(Enumeration enumeration = nsarray.objectEnumerator(); enumeration.hasMoreElements();) {
            MInstance minstance = (MInstance) enumeration.nextElement();
            if (minstance.state == MObject.DEAD
                    || minstance.state == MObject.STOPPING
                    || minstance.state == MObject.CRASHING
                    || minstance.state == MObject.UNKNOWN) {
                minstance.state = MObject.STARTING;
                processedInstance(minstance);
            }
        }
        sendCommandInstancesToWotaskds("START");
    }

    public void bounce(NSArray<MApplication> applications) {
      bounceGraceful(applications);
    }
   
    public void bounceGraceful(NSArray<MApplication> applications) {
        for (MApplication application : applications) {
            AppDetailPage page = AppDetailPage.create(context(), application);
            page = (AppDetailPage) page.bounceClickedWithGracefulBouncer();
        }
    }
   
    public void bounceShutdown(NSArray<MApplication> applications, int maxwait) {
        for (MApplication application : applications) {
            AppDetailPage page = AppDetailPage.create(context(), application);
            page = (AppDetailPage) page.bounceClickedWithShutdownBouncer(maxwait);
        }
    }

  public void bounceRolling(NSArray<MApplication> applications) {
        for (MApplication application : applications) {
            AppDetailPage page = AppDetailPage.create(context(), application);
            page = (AppDetailPage) page.bounceClickedWithRollingBouncer();
        }
  }
 
    @Override
    public WOComponent bounceClicked() {
        AppDetailPage page = AppDetailPage.create(context(), currentApplication);
        page = (AppDetailPage) page.bounceClicked();
        return page;
    }
   
    protected NSArray allInstances() {
        NSMutableArray nsmutablearray = new NSMutableArray();
        for (Enumeration enumeration = applicationArray().objectEnumerator(); enumeration.hasMoreElements(); ) {
            NSArray instances = ((MApplication) enumeration.nextElement()).instanceArray();
            nsmutablearray.addObjectsFromArray(instances);
        }
        return nsmutablearray;
    }

    private NSMutableArray applicationArray() {
        return siteConfig().applicationArray();
    }

    public WOComponent performInstanceAction() {
        handler().startReading();
        try {
            ((Method) selectedAction.valueForKey("actionName")).invoke(this, new Object[] { allInstances() });
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } finally {
            handler().endReading();
        }
        return AdminApplicationsPage.create(context());
    }

    public boolean showMovers() {
        return applicationArray().count() > 1;
    }

    public WOComponent saveMoving() {
        handler().startReading();
        try {
            MHost mhost;
            NSArray hosts = siteConfig().hostArray();
            for (Enumeration enumeration = hosts.objectEnumerator(); enumeration.hasMoreElements(); ) {
                mhost = (MHost) enumeration.nextElement();
                handler().sendOverwriteToWotaskd(mhost);
            }
            return AdminApplicationsPage.create(context());
        } finally {
            handler().endReading();
        }
    }

    public WOComponent moveUpClicked() {
        handler().startReading();
        try {
            NSMutableArray nsmutablearray = applicationArray();
            int i = nsmutablearray.indexOfObject(currentApplication);
            nsmutablearray.removeObjectAtIndex(i);
            if (i == 0)
                nsmutablearray.addObject(currentApplication);
            else
                nsmutablearray.insertObjectAtIndex(currentApplication, i - 1);
            siteConfig().dataHasChanged();
            return AdminApplicationsPage.create(context());
        } finally {
            handler().endReading();
        }
    }

    public WOComponent moveDownClicked() {
        handler().startReading();
        try {
            NSMutableArray nsmutablearray = applicationArray();
            int i = nsmutablearray.indexOfObject(currentApplication);
            nsmutablearray.removeObjectAtIndex(i);
            if (i == nsmutablearray.count())
                nsmutablearray.insertObjectAtIndex(currentApplication, 0);
            else
                nsmutablearray.insertObjectAtIndex(currentApplication, i + 1);
            siteConfig().dataHasChanged();
            return AdminApplicationsPage.create(context());
        } finally {
            handler().endReading();
        }
    }

    @Override
    public WOComponent addApplicationClicked() {
        String s = null;
        WOComponent result = null;
        if (!String_Extensions.isValidXMLString(newApplicationName))
            s = "\"" + newApplicationName
                    + "\" is an invalid application name.";
        if (siteConfig().applicationWithName(newApplicationName) != null)
            s = "An application with the name \"" + newApplicationName
                    + "\" does already exist.";
        if (s != null) {
            result = AdminApplicationsPage.create(context());
        } else {
            result = super.addApplicationClicked();
        }
        return result;
    }
   

    public static WOComponent create(WOContext context) {
        return WOApplication.application().pageWithName(AdminApplicationsPage.class.getName(), context);
    }

}
TOP

Related Classes of com.webobjects.monitor.application.AdminApplicationsPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.