You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

XSSFBorderFormatting.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. /* ====================================================================
  2. Licensed to the Apache Software Foundation (ASF) under one or more
  3. contributor license agreements. See the NOTICE file distributed with
  4. this work for additional information regarding copyright ownership.
  5. The ASF licenses this file to You under the Apache License, Version 2.0
  6. (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing, software
  10. distributed under the License is distributed on an "AS IS" BASIS,
  11. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. See the License for the specific language governing permissions and
  13. limitations under the License.
  14. ==================================================================== */
  15. package org.apache.poi.xssf.usermodel;
  16. import org.apache.poi.ss.usermodel.BorderFormatting;
  17. import org.apache.poi.ss.usermodel.BorderStyle;
  18. import org.apache.poi.ss.usermodel.Color;
  19. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
  20. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorderPr;
  21. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
  22. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
  23. /**
  24. * XSSF high level representation for Border Formatting component
  25. * of Conditional Formatting settings
  26. */
  27. public class XSSFBorderFormatting implements BorderFormatting {
  28. IndexedColorMap _colorMap;
  29. CTBorder _border;
  30. /*package*/ XSSFBorderFormatting(CTBorder border, IndexedColorMap colorMap) {
  31. _border = border;
  32. _colorMap = colorMap;
  33. }
  34. @Override
  35. public BorderStyle getBorderBottom() {
  36. return getBorderStyle(_border.getBottom());
  37. }
  38. @Override
  39. public BorderStyle getBorderDiagonal() {
  40. return getBorderStyle(_border.getDiagonal());
  41. }
  42. @Override
  43. public BorderStyle getBorderLeft() {
  44. return getBorderStyle(_border.getLeft());
  45. }
  46. @Override
  47. public BorderStyle getBorderRight() {
  48. return getBorderStyle(_border.getRight());
  49. }
  50. @Override
  51. public BorderStyle getBorderTop() {
  52. return getBorderStyle(_border.getTop());
  53. }
  54. @Override
  55. public XSSFColor getBottomBorderColorColor() {
  56. return getColor(_border.getBottom());
  57. }
  58. @Override
  59. public short getBottomBorderColor() {
  60. return getIndexedColor(getBottomBorderColorColor());
  61. }
  62. @Override
  63. public XSSFColor getDiagonalBorderColorColor() {
  64. return getColor(_border.getDiagonal());
  65. }
  66. @Override
  67. public short getDiagonalBorderColor() {
  68. return getIndexedColor(getDiagonalBorderColorColor());
  69. }
  70. @Override
  71. public XSSFColor getLeftBorderColorColor() {
  72. return getColor(_border.getLeft());
  73. }
  74. @Override
  75. public short getLeftBorderColor() {
  76. return getIndexedColor(getLeftBorderColorColor());
  77. }
  78. @Override
  79. public XSSFColor getRightBorderColorColor() {
  80. return getColor(_border.getRight());
  81. }
  82. @Override
  83. public short getRightBorderColor() {
  84. return getIndexedColor(getRightBorderColorColor());
  85. }
  86. @Override
  87. public XSSFColor getTopBorderColorColor() {
  88. return getColor(_border.getTop());
  89. }
  90. @Override
  91. public short getTopBorderColor() {
  92. return getIndexedColor(getTopBorderColorColor());
  93. }
  94. @Override
  95. public void setBorderBottom(BorderStyle border) {
  96. CTBorderPr pr = _border.isSetBottom() ? _border.getBottom() : _border.addNewBottom();
  97. if(border == BorderStyle.NONE) _border.unsetBottom();
  98. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  99. }
  100. @Override
  101. public void setBorderDiagonal(BorderStyle border) {
  102. CTBorderPr pr = _border.isSetDiagonal() ? _border.getDiagonal() : _border.addNewDiagonal();
  103. if(border == BorderStyle.NONE) _border.unsetDiagonal();
  104. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  105. }
  106. @Override
  107. public void setBorderLeft(BorderStyle border) {
  108. CTBorderPr pr = _border.isSetLeft() ? _border.getLeft() : _border.addNewLeft();
  109. if(border == BorderStyle.NONE) _border.unsetLeft();
  110. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  111. }
  112. @Override
  113. public void setBorderRight(BorderStyle border) {
  114. CTBorderPr pr = _border.isSetRight() ? _border.getRight() : _border.addNewRight();
  115. if(border == BorderStyle.NONE) _border.unsetRight();
  116. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  117. }
  118. @Override
  119. public void setBorderTop(BorderStyle border) {
  120. CTBorderPr pr = _border.isSetTop() ? _border.getTop() : _border.addNewTop();
  121. if(border == BorderStyle.NONE) _border.unsetTop();
  122. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  123. }
  124. @Override
  125. public void setBottomBorderColor(Color color) {
  126. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  127. if (xcolor == null) setBottomBorderColor((CTColor)null);
  128. else setBottomBorderColor(xcolor.getCTColor());
  129. }
  130. @Override
  131. public void setBottomBorderColor(short color) {
  132. CTColor ctColor = CTColor.Factory.newInstance();
  133. ctColor.setIndexed(color);
  134. setBottomBorderColor(ctColor);
  135. }
  136. public void setBottomBorderColor(CTColor color) {
  137. CTBorderPr pr = _border.isSetBottom() ? _border.getBottom() : _border.addNewBottom();
  138. if (color == null) {
  139. pr.unsetColor();
  140. } else {
  141. pr.setColor(color);
  142. }
  143. }
  144. @Override
  145. public void setDiagonalBorderColor(Color color) {
  146. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  147. if (xcolor == null) setDiagonalBorderColor((CTColor)null);
  148. else setDiagonalBorderColor(xcolor.getCTColor());
  149. }
  150. @Override
  151. public void setDiagonalBorderColor(short color) {
  152. CTColor ctColor = CTColor.Factory.newInstance();
  153. ctColor.setIndexed(color);
  154. setDiagonalBorderColor(ctColor);
  155. }
  156. public void setDiagonalBorderColor(CTColor color) {
  157. CTBorderPr pr = _border.isSetDiagonal() ? _border.getDiagonal() : _border.addNewDiagonal();
  158. if (color == null) {
  159. pr.unsetColor();
  160. } else {
  161. pr.setColor(color);
  162. }
  163. }
  164. @Override
  165. public void setLeftBorderColor(Color color) {
  166. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  167. if (xcolor == null) setLeftBorderColor((CTColor)null);
  168. else setLeftBorderColor(xcolor.getCTColor());
  169. }
  170. @Override
  171. public void setLeftBorderColor(short color) {
  172. CTColor ctColor = CTColor.Factory.newInstance();
  173. ctColor.setIndexed(color);
  174. setLeftBorderColor(ctColor);
  175. }
  176. public void setLeftBorderColor(CTColor color) {
  177. CTBorderPr pr = _border.isSetLeft() ? _border.getLeft() : _border.addNewLeft();
  178. if (color == null) {
  179. pr.unsetColor();
  180. } else {
  181. pr.setColor(color);
  182. }
  183. }
  184. @Override
  185. public void setRightBorderColor(Color color) {
  186. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  187. if (xcolor == null) setRightBorderColor((CTColor)null);
  188. else setRightBorderColor(xcolor.getCTColor());
  189. }
  190. @Override
  191. public void setRightBorderColor(short color) {
  192. CTColor ctColor = CTColor.Factory.newInstance();
  193. ctColor.setIndexed(color);
  194. setRightBorderColor(ctColor);
  195. }
  196. public void setRightBorderColor(CTColor color) {
  197. CTBorderPr pr = _border.isSetRight() ? _border.getRight() : _border.addNewRight();
  198. if (color == null) {
  199. pr.unsetColor();
  200. } else {
  201. pr.setColor(color);
  202. }
  203. }
  204. @Override
  205. public void setTopBorderColor(Color color) {
  206. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  207. if (xcolor == null) setTopBorderColor((CTColor)null);
  208. else setTopBorderColor(xcolor.getCTColor());
  209. }
  210. @Override
  211. public void setTopBorderColor(short color) {
  212. CTColor ctColor = CTColor.Factory.newInstance();
  213. ctColor.setIndexed(color);
  214. setTopBorderColor(ctColor);
  215. }
  216. public void setTopBorderColor(CTColor color) {
  217. CTBorderPr pr = _border.isSetTop() ? _border.getTop() : _border.addNewTop();
  218. if (color == null) {
  219. pr.unsetColor();
  220. } else {
  221. pr.setColor(color);
  222. }
  223. }
  224. @Override
  225. public BorderStyle getBorderVertical() {
  226. return getBorderStyle(_border.getVertical());
  227. }
  228. @Override
  229. public BorderStyle getBorderHorizontal() {
  230. return getBorderStyle(_border.getHorizontal());
  231. }
  232. public short getVerticalBorderColor() {
  233. return getIndexedColor(getVerticalBorderColorColor());
  234. }
  235. public XSSFColor getVerticalBorderColorColor() {
  236. return getColor(_border.getVertical());
  237. }
  238. public short getHorizontalBorderColor() {
  239. return getIndexedColor(getHorizontalBorderColorColor());
  240. }
  241. public XSSFColor getHorizontalBorderColorColor() {
  242. return getColor(_border.getHorizontal());
  243. }
  244. public void setBorderHorizontal(BorderStyle border) {
  245. CTBorderPr pr = _border.isSetHorizontal() ? _border.getHorizontal() : _border.addNewHorizontal();
  246. if(border == BorderStyle.NONE) _border.unsetHorizontal();
  247. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  248. }
  249. public void setBorderVertical(BorderStyle border) {
  250. CTBorderPr pr = _border.isSetVertical() ? _border.getVertical() : _border.addNewVertical();
  251. if(border == BorderStyle.NONE) _border.unsetVertical();
  252. else pr.setStyle(STBorderStyle.Enum.forInt(border.getCode() + 1));
  253. }
  254. public void setHorizontalBorderColor(short color) {
  255. CTColor ctColor = CTColor.Factory.newInstance();
  256. ctColor.setIndexed(color);
  257. setHorizontalBorderColor(ctColor);
  258. }
  259. public void setHorizontalBorderColor(Color color) {
  260. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  261. if (xcolor == null) setBottomBorderColor((CTColor)null);
  262. else setHorizontalBorderColor(xcolor.getCTColor());
  263. }
  264. public void setHorizontalBorderColor(CTColor color) {
  265. CTBorderPr pr = _border.isSetHorizontal() ? _border.getHorizontal() : _border.addNewHorizontal();
  266. if (color == null) {
  267. pr.unsetColor();
  268. } else {
  269. pr.setColor(color);
  270. }
  271. }
  272. public void setVerticalBorderColor(short color) {
  273. CTColor ctColor = CTColor.Factory.newInstance();
  274. ctColor.setIndexed(color);
  275. setVerticalBorderColor(ctColor);
  276. }
  277. public void setVerticalBorderColor(Color color) {
  278. XSSFColor xcolor = XSSFColor.toXSSFColor(color);
  279. if (xcolor == null) setBottomBorderColor((CTColor)null);
  280. else setVerticalBorderColor(xcolor.getCTColor());
  281. }
  282. public void setVerticalBorderColor(CTColor color) {
  283. CTBorderPr pr = _border.isSetVertical() ? _border.getVertical() : _border.addNewVertical();
  284. if (color == null) {
  285. pr.unsetColor();
  286. } else {
  287. pr.setColor(color);
  288. }
  289. }
  290. /**
  291. * @return BorderStyle from the given element's style, or NONE if border is null
  292. */
  293. private BorderStyle getBorderStyle(CTBorderPr borderPr) {
  294. if (borderPr == null) return BorderStyle.NONE;
  295. STBorderStyle.Enum ptrn = borderPr.getStyle();
  296. return ptrn == null ? BorderStyle.NONE : BorderStyle.valueOf((short)(ptrn.intValue() - 1));
  297. }
  298. private short getIndexedColor(XSSFColor color) {
  299. return color == null ? 0 : color.getIndexed();
  300. }
  301. private XSSFColor getColor(CTBorderPr pr) {
  302. return pr == null ? null : XSSFColor.from(pr.getColor(), _colorMap);
  303. }
  304. }