001/*-------------------------------------------------------------------------+ 002| | 003| Copyright 2005-2011 The ConQAT Project | 004| | 005| Licensed under the Apache License, Version 2.0 (the "License"); | 006| you may not use this file except in compliance with the License. | 007| You may obtain a copy of the License at | 008| | 009| http://www.apache.org/licenses/LICENSE-2.0 | 010| | 011| Unless required by applicable law or agreed to in writing, software | 012| distributed under the License is distributed on an "AS IS" BASIS, | 013| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 014| See the License for the specific language governing permissions and | 015| limitations under the License. | 016+-------------------------------------------------------------------------*/ 017package org.conqat.engine.commons.css; 018 019import static org.conqat.lib.commons.color.ECCSMColor.DARK_GRAY; 020import static org.conqat.lib.commons.color.ECCSMColor.LIGHT_GRAY; 021import static org.conqat.lib.commons.html.ECSSProperty.BACKGROUND_COLOR; 022import static org.conqat.lib.commons.html.ECSSProperty.COLOR; 023import static org.conqat.lib.commons.html.ECSSProperty.CURSOR; 024import static org.conqat.lib.commons.html.ECSSProperty.DISPLAY; 025import static org.conqat.lib.commons.html.ECSSProperty.FILTER; 026import static org.conqat.lib.commons.html.ECSSProperty.FONT_FAMILY; 027import static org.conqat.lib.commons.html.ECSSProperty.FONT_SIZE; 028import static org.conqat.lib.commons.html.ECSSProperty.FONT_WEIGHT; 029import static org.conqat.lib.commons.html.ECSSProperty.MARGIN_RIGHT; 030import static org.conqat.lib.commons.html.ECSSProperty.OPACITY; 031import static org.conqat.lib.commons.html.ECSSProperty.PADDING_LEFT; 032import static org.conqat.lib.commons.html.ECSSProperty.PADDING_RIGHT; 033import static org.conqat.lib.commons.html.ECSSProperty.TEXT_ALIGN; 034import static org.conqat.lib.commons.html.ECSSProperty.TEXT_DECORATION; 035import static org.conqat.lib.commons.html.ECSSProperty.VERTICAL_ALIGN; 036import static org.conqat.lib.commons.html.ECSSProperty.WHITE_SPACE; 037import static org.conqat.lib.commons.html.ECSSProperty.WIDTH; 038import static org.conqat.lib.commons.html.EHTMLElement.A; 039import static org.conqat.lib.commons.html.EHTMLElement.IMG; 040 041import java.io.File; 042import java.io.IOException; 043import java.io.PrintStream; 044 045import org.conqat.engine.core.core.ConQATException; 046import org.conqat.lib.commons.color.ECCSMColor; 047import org.conqat.lib.commons.filesystem.FileSystemUtils; 048import org.conqat.lib.commons.html.CSSDeclarationBlock; 049import org.conqat.lib.commons.html.CSSManagerBase; 050import org.conqat.lib.commons.html.ECSSPseudoClass; 051 052/** 053 * The CSS manager used for ConQATDoc. This class defines a number of basic 054 * classes that should be reused in other places. Furthermore it sets the 055 * default styles for some HTML elments. 056 */ 057public class CSSMananger extends CSSManagerBase { 058 059 /** Sans-serif font. */ 060 public static final CSSDeclarationBlock SAN_SERIF_FONT = new CSSDeclarationBlock(FONT_FAMILY, 061 "verdana, helvetica, sans-serif"); 062 063 /** Default font. */ 064 public static final CSSDeclarationBlock DEFAULT_FONT = new CSSDeclarationBlock(SAN_SERIF_FONT, FONT_SIZE, "13px"); 065 066 /** Small font. */ 067 public static final CSSDeclarationBlock SMALL_FONT = new CSSDeclarationBlock(SAN_SERIF_FONT, FONT_SIZE, "10px"); 068 069 /** Bold font. */ 070 public static final CSSDeclarationBlock DEFAULT_FONT_BOLD = new CSSDeclarationBlock(DEFAULT_FONT, FONT_WEIGHT, 071 "bold"); 072 073 /** Syntax highlighting style for comments */ 074 public static final CSSDeclarationBlock COMMENT = new CSSDeclarationBlock(SMALL_FONT, COLOR, "green"); 075 076 /** Syntax highlighting style for keywords */ 077 public static final CSSDeclarationBlock KEYWORD = new CSSDeclarationBlock(SMALL_FONT, COLOR, "brown", FONT_WEIGHT, 078 "bold"); 079 080 /** Syntax highlighting style for literals */ 081 public static final CSSDeclarationBlock LITERAL = new CSSDeclarationBlock(SMALL_FONT, COLOR, "blue"); 082 083 /** Syntax highlighting style for changed gaps */ 084 public static final CSSDeclarationBlock GAP_CHANGED = new CSSDeclarationBlock(BACKGROUND_COLOR, "yellow"); 085 086 /** Syntax highlighting style for removed gaps */ 087 public static final CSSDeclarationBlock GAP_REMOVED = new CSSDeclarationBlock(BACKGROUND_COLOR, "orange"); 088 089 /** Syntax highlighting style for added gaps */ 090 public static final CSSDeclarationBlock GAP_ADDED = new CSSDeclarationBlock(BACKGROUND_COLOR, "lightgreen"); 091 092 /** Dark gray border. */ 093 public static final CSSDeclarationBlock DARK_GRAY_BORDER = new CSSDeclarationBlock().setBorder("1px", "solid", 094 DARK_GRAY.getHTMLColorCode()); 095 096 /** Light blue border plus margin. */ 097 public static final CSSDeclarationBlock IMAGE_STYLE = new CSSDeclarationBlock().setBorderStyle("none") 098 .setMargin("8px"); 099 100 /** Base class for table cells. */ 101 private static final CSSDeclarationBlock TABLE_CELL_BASE = new CSSDeclarationBlock(SMALL_FONT, TEXT_ALIGN, "left") 102 .setMargin("0px").setPadding("2px"); 103 104 /** Default table header cell. */ 105 public static final CSSDeclarationBlock TABLE_HEADER_CELL = new CSSDeclarationBlock(TABLE_CELL_BASE, COLOR, "white", 106 BACKGROUND_COLOR, DARK_GRAY.getHTMLColorCode(), VERTICAL_ALIGN, "text-bottom", FONT_WEIGHT, "bold", 107 WHITE_SPACE, "nowrap"); 108 109 /** Default table cell. */ 110 public static final CSSDeclarationBlock TABLE_CELL = new CSSDeclarationBlock(TABLE_CELL_BASE, BACKGROUND_COLOR, 111 LIGHT_GRAY.getHTMLColorCode(), VERTICAL_ALIGN, "middle", WHITE_SPACE, "nowrap", WIDTH, "auto"); 112 113 /** Wide table cell. */ 114 public static final CSSDeclarationBlock WIDE_TABLE_CELL = new CSSDeclarationBlock(TABLE_CELL_BASE, BACKGROUND_COLOR, 115 LIGHT_GRAY.getHTMLColorCode(), VERTICAL_ALIGN, "middle", WHITE_SPACE, "nowrap", WIDTH, "100%"); 116 117 /** Additional styling for a table cell that contains an attribute. */ 118 public static final CSSDeclarationBlock ATTRIBUTE_TABLE_CELL = new CSSDeclarationBlock(TABLE_CELL, PADDING_LEFT, 119 "13px", PADDING_RIGHT, "25px"); 120 121 /** Link in table. */ 122 public static CSSDeclarationBlock TABLE_LINK = new CSSDeclarationBlock(SMALL_FONT, FONT_WEIGHT, "normal", COLOR, 123 "black", TEXT_DECORATION, "none"); 124 125 /** Link in table head. */ 126 public static CSSDeclarationBlock TABLE_HEADER_LINK = new CSSDeclarationBlock(SMALL_FONT, FONT_WEIGHT, "bold", 127 COLOR, "white", TEXT_DECORATION, "none"); 128 129 /** Icon in table. */ 130 public static CSSDeclarationBlock TABLE_ICON = new CSSDeclarationBlock(DISPLAY, "inline", VERTICAL_ALIGN, "middle", 131 MARGIN_RIGHT, "6px"); 132 133 /** Style for DIVs used in tool-tips. */ 134 public static final CSSDeclarationBlock TOOL_TIP_DIV = new CSSDeclarationBlock(DARK_GRAY_BORDER, COLOR, "black", 135 DISPLAY, "none", BACKGROUND_COLOR, LIGHT_GRAY.getHTMLColorCode(), OPACITY, "0.8", FILTER, 136 "alpha(opacity = 80)"); 137 138 /** Style for tool-tip captions. */ 139 public static final CSSDeclarationBlock TOOL_TIP_CAPTION = new CSSDeclarationBlock(DARK_GRAY_BORDER, COLOR, "white", 140 BACKGROUND_COLOR, DARK_GRAY.getHTMLColorCode()).inheritFrom(SMALL_FONT); 141 142 /** Style for tool-tip cells. */ 143 public static final CSSDeclarationBlock TOOL_TIP_CELL = new CSSDeclarationBlock(SMALL_FONT, COLOR, "black", 144 BACKGROUND_COLOR, LIGHT_GRAY.getHTMLColorCode()); 145 146 /** Blue background. */ 147 public static final CSSDeclarationBlock BLUE_BACKGROUND = new CSSDeclarationBlock(BACKGROUND_COLOR, 148 ECCSMColor.BLUE.getHTMLColorCode(), COLOR, "white"); 149 150 /** Light blue background. */ 151 public static final CSSDeclarationBlock LIGHT_BLUE_BACKGROUND = new CSSDeclarationBlock(BACKGROUND_COLOR, 152 ECCSMColor.LIGHT_BLUE.getHTMLColorCode()); 153 154 /** White background. */ 155 public static final CSSDeclarationBlock WHITE_BACKGROUND = new CSSDeclarationBlock(BACKGROUND_COLOR, "white"); 156 157 /** Zero padding, zero margin. */ 158 public static CSSDeclarationBlock DEFAULT_CONTAINER = new CSSDeclarationBlock(DEFAULT_FONT).setMargin("0px") 159 .setPadding("0px"); 160 161 /** CSS for inlined image. */ 162 public static CSSDeclarationBlock INLINED_IMAGE = new CSSDeclarationBlock(DISPLAY, "inline", VERTICAL_ALIGN, 163 "text-bottom"); 164 165 /** CSS for link cursor. */ 166 public static final CSSDeclarationBlock LINK_CURSOR = new CSSDeclarationBlock(CURSOR, "pointer"); 167 168 /** Create and register all CSS blocks used. */ 169 private CSSMananger() { 170 addDefaultDeclaration(IMG, new CSSDeclarationBlock().setBorderWidth("0px")); 171 172 addDefaultDeclaration(A, new CSSDeclarationBlock(DEFAULT_FONT, FONT_SIZE, "12px", FONT_WEIGHT, "600", COLOR, 173 "black", TEXT_DECORATION, "none")); 174 175 addDefaultDeclaration(A, ECSSPseudoClass.HOVER, new CSSDeclarationBlock(TEXT_DECORATION, "underline")); 176 177 } 178 179 /** The singleton instance. */ 180 private static CSSMananger instance; 181 182 /** Get singleton instance. */ 183 public static CSSMananger getInstance() { 184 if (instance == null) { 185 instance = new CSSMananger(); 186 } 187 return instance; 188 } 189 190 /** 191 * Write style file to disk. 192 * 193 * @throws ConQATException 194 * if style file could not be written. 195 */ 196 public void write(File outputDirectory) throws ConQATException { 197 File file = new File(outputDirectory, "css/style.css"); 198 try { 199 FileSystemUtils.ensureParentDirectoryExists(file); 200 PrintStream stream = new PrintStream(file); 201 writeOut(stream); 202 stream.close(); 203 } catch (IOException ex) { 204 throw new ConQATException("Could not write style file: " + file); 205 } 206 207 } 208 209 /** Write out declarations. This exposes the super class method. */ 210 @Override 211 public void writeOutDeclarations(PrintStream stream) { 212 super.writeOutDeclarations(stream); 213 } 214 215 /** 216 * Write out default declarations for element (i.e. without specific class). 217 * This exposes the super class method. 218 */ 219 @Override 220 public void writeOutDefaultDeclarations(PrintStream stream) { 221 super.writeOutDefaultDeclarations(stream); 222 } 223}