99/**
1010 * Container restart policy
1111 *
12- * no – Do not restart the container if it dies. (default)
13- * on-failure – Restart the container if it exits with a non-zero exit code.
14- * Can also accept an optional maximum restart count (e.g. on-failure:5).
15- * always – Always restart the container no matter what exit code is returned.
12+ * <dl>
13+ * <dt>no</dt>
14+ * <dd>Do not restart the container if it dies. (default)</dd>
15+ *
16+ * <dt>on-failure</dt>
17+ * <dd>Restart the container if it exits with a non-zero exit code.
18+ * Can also accept an optional maximum restart count (e.g. on-failure:5).<dd>
19+ *
20+ * <dt>always</dt>
21+ * <dd>Always restart the container no matter what exit code is returned.<dd>
22+ * </dl>
1623 *
1724 * @author marcus
1825 *
@@ -33,15 +40,27 @@ private RestartPolicy(int maximumRetryCount, String name) {
3340 this .maximumRetryCount = maximumRetryCount ;
3441 this .name = name ;
3542 }
36-
43+
44+ /**
45+ * Do not restart the container if it dies. (default)
46+ */
3747 public static RestartPolicy noRestart () {
3848 return new RestartPolicy ();
3949 }
40-
50+
51+ /**
52+ * Always restart the container no matter what exit code is returned.
53+ */
4154 public static RestartPolicy alwaysRestart () {
4255 return new RestartPolicy (0 , "always" );
4356 }
44-
57+
58+ /**
59+ * Restart the container if it exits with a non-zero exit code.
60+ *
61+ * @param maximumRetryCount the maximum number of restarts.
62+ * Set to <code>0</code> for unlimited retries.
63+ */
4564 public static RestartPolicy onFailureRestart (int maximumRetryCount ) {
4665 return new RestartPolicy (maximumRetryCount , "on-failure" );
4766 }
@@ -54,6 +73,47 @@ public String getName() {
5473 return name ;
5574 }
5675
76+ /**
77+ * Parses a textual restart polixy specification (as used by the Docker CLI)
78+ * to a {@link RestartPolicy}.
79+ *
80+ * @param serialized the specification, e.g. <code>on-failure:2</code>
81+ * @return a {@link RestartPolicy} matching the specification
82+ * @throws IllegalArgumentException if the specification cannot be parsed
83+ */
84+ public static RestartPolicy parse (String serialized ) throws IllegalArgumentException {
85+ try {
86+ String [] parts = serialized .split (":" );
87+ String name = parts [0 ];
88+ if ("no" .equals (name ))
89+ return noRestart ();
90+ if ("always" .equals (name ))
91+ return alwaysRestart ();
92+ if ("on-failure" .equals (name )) {
93+ int count = 0 ;
94+ if (parts .length == 2 ) {
95+ count = Integer .parseInt (parts [1 ]);
96+ }
97+ return onFailureRestart (count );
98+ }
99+ throw new IllegalArgumentException ();
100+ } catch (Exception e ) {
101+ throw new IllegalArgumentException ("Error parsing RestartPolicy '" + serialized + "'" );
102+ }
103+ }
104+
105+ /**
106+ * Returns a string representation of this {@link RestartPolicy}.
107+ * The format is <code>name[:count]</code>, like the argument in {@link #parse(String)}.
108+ *
109+ * @return a string representation of this {@link RestartPolicy}
110+ */
111+ @ Override
112+ public String toString () {
113+ String result = name .isEmpty () ? "no" : name ;
114+ return maximumRetryCount > 0 ? result + ":" + maximumRetryCount : result ;
115+ }
116+
57117 @ Override
58118 public boolean equals (Object obj ) {
59119 if (obj instanceof RestartPolicy ) {
0 commit comments