2 * Copyright 2000-2011 JetBrains s.r.o.
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 package jetbrains.buildServer.nuget.server.trigger;
\r
19 import jetbrains.buildServer.buildTriggers.BuildTriggerException;
\r
20 import jetbrains.buildServer.buildTriggers.PolledBuildTrigger;
\r
21 import jetbrains.buildServer.buildTriggers.PolledTriggerContext;
\r
22 import org.jetbrains.annotations.NotNull;
\r
24 import java.util.concurrent.Callable;
\r
25 import java.util.concurrent.ExecutionException;
\r
26 import java.util.concurrent.ExecutorService;
\r
27 import java.util.concurrent.Future;
\r
30 * Created by Eugene Petrenko (eugene.petrenko@gmail.com)
\r
31 * Date: 12.07.11 23:29
\r
33 public class ThreadedBuildTriggerPolicy extends PolledBuildTrigger {
\r
34 private final ExecutorService myExecutor;
\r
35 private final TriggerUpdateChecker myUpdater;
\r
36 private Future<BuildStartReason> myUpdateRequired;
\r
38 public ThreadedBuildTriggerPolicy(@NotNull final ExecutorService executor,
\r
39 @NotNull final TriggerUpdateChecker updater) {
\r
40 myExecutor = executor;
\r
41 myUpdater = updater;
\r
45 public synchronized void triggerBuild(@NotNull PolledTriggerContext context) throws BuildTriggerException {
\r
46 if (myUpdateRequired == null) {
\r
47 myUpdateRequired = myExecutor.submit(createUpdateTask(context));
\r
50 if (!myUpdateRequired.isDone()) return;
\r
52 BuildStartReason result;
\r
54 result = myUpdateRequired.get();
\r
55 } catch (InterruptedException e) {
\r
57 } catch (ExecutionException e) {
\r
58 Throwable cause = e.getCause();
\r
59 if (cause instanceof BuildTriggerException) throw (BuildTriggerException)cause;
\r
60 throw new BuildTriggerException(cause.getMessage(), cause);
\r
62 myUpdateRequired = null;
\r
65 if (result != null) {
\r
66 context.getBuildType().addToQueue(result.getReason());
\r
71 private Callable<BuildStartReason> createUpdateTask(@NotNull final PolledTriggerContext storage) {
\r
72 return new Callable<BuildStartReason>() {
\r
73 public BuildStartReason call() throws Exception {
\r
74 return myUpdater.checkChanges(storage.getTriggerDescriptor(), storage.getCustomDataStorage());
\r