View Javadoc
1   /**
2    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3    *
4    * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
5    * Portions Copyright 2013-2016 Philip Helger + contributors
6    *
7    * The contents of this file are subject to the terms of either the GNU
8    * General Public License Version 2 only ("GPL") or the Common Development
9    * and Distribution License("CDDL") (collectively, the "License").  You
10   * may not use this file except in compliance with the License.  You can
11   * obtain a copy of the License at
12   * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
13   * or packager/legal/LICENSE.txt.  See the License for the specific
14   * language governing permissions and limitations under the License.
15   *
16   * When distributing the software, include this License Header Notice in each
17   * file and include the License file at packager/legal/LICENSE.txt.
18   *
19   * GPL Classpath Exception:
20   * Oracle designates this particular file as subject to the "Classpath"
21   * exception as provided by Oracle in the GPL Version 2 section of the License
22   * file that accompanied this code.
23   *
24   * Modifications:
25   * If applicable, add the following below the License Header, with the fields
26   * enclosed by brackets [] replaced by your own identifying information:
27   * "Portions Copyright [year] [name of copyright owner]"
28   *
29   * Contributor(s):
30   * If you wish your version of this file to be governed by only the CDDL or
31   * only the GPL Version 2, indicate your decision by adding "[Contributor]
32   * elects to include this software in this distribution under the [CDDL or GPL
33   * Version 2] license."  If you don't indicate a single choice of license, a
34   * recipient has the option to distribute your version of this file under
35   * either the CDDL, the GPL Version 2 or to extend the choice of license to
36   * its licensees as provided above.  However, if you add GPL Version 2 code
37   * and therefore, elected the GPL Version 2 license, then the option applies
38   * only if the new code is made subject to such option by the copyright
39   * holder.
40   */
41  package com.helger.jcodemodel;
42  
43  import javax.annotation.Nonnull;
44  import javax.annotation.Nullable;
45  
46  /**
47   * Case statement
48   */
49  public class JCase implements IJStatement
50  {
51    /**
52     * label part of the case statement
53     */
54    private final IJExpression m_aLabelExpr;
55  
56    /**
57     * is this a regular case statement or a default case statement?
58     */
59    private boolean m_bIsDefaultCase = false;
60  
61    /**
62     * JBlock of statements which makes up body of this While statement
63     */
64    private JBlock m_aBody;
65  
66    /**
67     * Construct a case statement
68     *
69     * @param label
70     *        Label name. May not be <code>null</code>.
71     */
72    public JCase (@Nonnull final IJExpression label)
73    {
74      this (label, false);
75    }
76  
77    /**
78     * Construct a case statement. If isDefaultCase is true, then label should be
79     * null since default cases don't have a label.
80     *
81     * @param label
82     *        Label name. May be <code>null</code> for the default case.
83     * @param isDefaultCase
84     *        <code>true</code> if this is the <code>default:</code> case which
85     *        renders differently.
86     */
87    public JCase (@Nullable final IJExpression label, final boolean isDefaultCase)
88    {
89      m_aLabelExpr = label;
90      m_bIsDefaultCase = isDefaultCase;
91    }
92  
93    @Nullable
94    public IJExpression label ()
95    {
96      return m_aLabelExpr;
97    }
98  
99    public boolean isDefaultCase ()
100   {
101     return m_bIsDefaultCase;
102   }
103 
104   @Nonnull
105   public JBlock body ()
106   {
107     if (m_aBody == null)
108       m_aBody = new JBlock ();
109     return m_aBody;
110   }
111 
112   public void state (@Nonnull final JFormatter f)
113   {
114     f.indent ();
115     if (m_bIsDefaultCase)
116     {
117       f.print ("default:").newline ();
118     }
119     else
120     {
121       f.print ("case ").generable (m_aLabelExpr).print (':').newline ();
122     }
123     if (m_aBody != null)
124       f.statement (m_aBody);
125     f.outdent ();
126   }
127 }