001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020
021 package org.apache.geronimo.kernel.config;
022
023 import java.util.ArrayList;
024 import java.util.Collections;
025 import java.util.List;
026
027 import org.apache.geronimo.kernel.repository.Artifact;
028
029 /**
030 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
031 */
032 public class RecordingLifecycleMonitor implements LifecycleMonitor{
033 private final List<Event> events = new ArrayList<Event>();
034
035 public void addConfiguration(Artifact configurationId) {
036 events.add(new Event(Action.ADD, configurationId));
037 }
038
039 public void resolving(Artifact configurationId) {
040 events.add(new Event(Action.RESOLVING, configurationId));
041 }
042
043 public void reading(Artifact configurationId) {
044 events.add(new Event(Action.READING, configurationId));
045 }
046
047 public void loading(Artifact configurationId) {
048 events.add(new Event(Action.LOADING, configurationId));
049 }
050
051 public void starting(Artifact configurationId) {
052 events.add(new Event(Action.STARTING, configurationId));
053 }
054
055 public void stopping(Artifact configurationId) {
056 events.add(new Event(Action.STOPPING, configurationId));
057 }
058
059 public void unloading(Artifact configurationId) {
060 events.add(new Event(Action.UNLOADING, configurationId));
061 }
062
063 public void succeeded(Artifact configurationId) {
064 events.add(new Event(Action.SUCCEEDED, configurationId));
065 }
066
067 public void failed(Artifact configurationId, Throwable cause) {
068 events.add(new FailedEvent(configurationId, cause));
069 }
070
071 public void finished() {
072 events.add(new Event(Action.FINISHED, null));
073 }
074
075 public List<Event> getEvents() {
076 return Collections.unmodifiableList(events);
077 }
078
079 @Override
080 public String toString() {
081 StringBuffer buf = new StringBuffer();
082 for (Event event: events) {
083 buf.append(event.toString()).append("\n");
084 }
085 return buf.toString();
086 }
087
088 private static enum Action {
089
090 ADD,
091 RESOLVING,
092 READING,
093 LOADING,
094 STARTING,
095 STOPPING,
096 UNLOADING,
097 SUCCEEDED,
098 FAILED,
099 FINISHED
100 }
101
102 private static class Event {
103 private final Action action;
104 private final Artifact artifact;
105
106 private Event(Action action, Artifact artifact) {
107 this.action = action;
108 this.artifact = artifact;
109 }
110
111 public Action getAction() {
112 return action;
113 }
114
115 public Artifact getArtifact() {
116 return artifact;
117 }
118
119 @Override
120 public String toString() {
121 if (artifact == null) {
122 return action.toString();
123 }
124 return artifact.toString() + ": " + action.toString();
125 }
126 }
127
128 private static class FailedEvent extends Event {
129 private final Throwable cause;
130
131 private FailedEvent(Artifact artifact, Throwable cause) {
132 super(Action.FAILED, artifact);
133 this.cause = cause;
134 }
135
136 public Throwable getCause() {
137 return cause;
138 }
139
140 @Override
141 public String toString() {
142 return super.toString() + ": " + cause.getMessage();
143 }
144 }
145 }