1 /*
2 * Licensed to The Apereo Foundation under one or more contributor license
3 * agreements. See the NOTICE file distributed with this work for additional
4 * information regarding copyright ownership.
5 *
6 *
7 * The Apereo Foundation licenses this file to you under the Educational
8 * Community License, Version 2.0 (the "License"); you may not use this file
9 * except in compliance with the License. You may obtain a copy of the License
10 * at:
11 *
12 * http://opensource.org/licenses/ecl2.txt
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17 * License for the specific language governing permissions and limitations under
18 * the License.
19 *
20 */
21
22
23 package org.opencastproject.util.data;
24
25 import static org.opencastproject.util.data.functions.Functions.chuck;
26
27 /**
28 * Run a side effect.
29 *
30 * @see X
31 */
32 public abstract class Effect0 extends Function0<Void> {
33 @Override
34 public final Void apply() {
35 run();
36 return null;
37 }
38
39 /** Run the side effect. */
40 protected abstract void run();
41
42 /** Version of {@link Effect0} that allows for throwing a checked exception. */
43 public abstract static class X extends Effect0 {
44 @Override
45 protected final void run() {
46 try {
47 xrun();
48 } catch (Exception e) {
49 chuck(e);
50 }
51 }
52
53 /**
54 * Run the side effect. Any thrown exception gets "chucked" so that you may
55 * catch them as is. See {@link org.opencastproject.util.data.functions.Functions#chuck(Throwable)} for details.
56 */
57 protected abstract void xrun() throws Exception;
58 }
59 }