blob: e8bb6cccce24980a749b206165625455ad382649 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.timer;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
/**
* Represents the component that manages {@link TimerEndpoint}. It holds the
* list of {@link TimerConsumer} objects that are started.
*
* @version
*/
public class TimerComponent extends DefaultComponent {
private final Map<String, Timer> timers = new HashMap<String, Timer>();
public Timer getTimer(TimerEndpoint endpoint) {
String key = endpoint.getTimerName();
if (!endpoint.isDaemon()) {
key = "nonDaemon:" + key;
}
Timer answer;
synchronized (timers) {
answer = timers.get(key);
if (answer == null) {
answer = new Timer(endpoint.getTimerName(), endpoint.isDaemon());
timers.put(key, answer);
}
}
return answer;
}
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
TimerEndpoint answer = new TimerEndpoint(uri, this, remaining);
// convert time from String to a java.util.Date using the supported patterns
String time = getAndRemoveParameter(parameters, "time", String.class);
String pattern = getAndRemoveParameter(parameters, "pattern", String.class);
if (time != null) {
SimpleDateFormat sdf;
if (pattern != null) {
sdf = new SimpleDateFormat(pattern);
} else if (time.contains("T")) {
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
Date date = sdf.parse(time);
answer.setTime(date);
}
setProperties(answer, parameters);
return answer;
}
@Override
protected void doStop() throws Exception {
Collection<Timer> collection = timers.values();
for (Timer timer : collection) {
timer.cancel();
}
timers.clear();
}
}