1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2015 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 /** 26 * Copyright (C) 2008, 2010 Richard van Nieuwenhoven - ritchie [at] gmx [dot] at 27 * Copyright (C) 2000, 2001 Paul Cody Johnston - pcj@inxar.org <br> 28 * This file is part of Jenesis4java. Jenesis4java is free software: you can 29 * redistribute it and/or modify it under the terms of the GNU Lesser General 30 * Public License as published by the Free Software Foundation, either version 3 31 * of the License, or (at your option) any later version.<br> 32 * Jenesis4java is distributed in the hope that it will be useful, but WITHOUT 33 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 34 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 35 * details.<br> 36 * You should have received a copy of the GNU Lesser General Public License 37 * along with Jenesis4java. If not, see <http://www.gnu.org/licenses/>. 38 */ 39 /** 40 * Classes that implement this interface are access controllable according to 41 * the Java Language Specification. These include classes, interfaces, fields, 42 * methods, and constructors. 43 */ 44 public interface Access extends Codeable { 45 46 enum AccessType { 47 NONE(null), 48 PUBLIC("public"), 49 PACKAGE(null), 50 PROTECTED("protected"), 51 PRIVATE("private"); 52 53 static public CodeWriter toCode(AccessType accesstype, CodeWriter out) { 54 if (accesstype == null) { 55 return PACKAGE.toCode(out); 56 } else { 57 return accesstype.toCode(out); 58 } 59 } 60 61 private final String accessString; 62 63 AccessType(String accessString) { 64 this.accessString = accessString != null ? accessString + " " : null; 65 } 66 67 public CodeWriter toCode(CodeWriter out) { 68 if (accessString != null) { 69 out.write(accessString); 70 } 71 return out; 72 } 73 74 } 75 76 /** 77 * Constant to indicate public access. 78 */ 79 AccessType PUBLIC = AccessType.PUBLIC; 80 81 /** 82 * Constant to indicate package access. 83 */ 84 AccessType PACKAGE = AccessType.PACKAGE; 85 86 /** 87 * Constant to indicate protected access. 88 */ 89 AccessType PROTECTED = AccessType.PROTECTED; 90 91 /** 92 * Constant to indicate private access. 93 */ 94 AccessType PRIVATE = AccessType.PRIVATE; 95 96 /** 97 * Gets the access level as one of the constants in this interface. 98 */ 99 AccessType getAccess(); 100 101 /** 102 * Sets the access level according to the given constant. 103 */ 104 Access setAccess(AccessType level); 105 }