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.

Context.java 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * ====================================================================
  3. * Licensed to the Apache Software Foundation (ASF) under one or more
  4. * contributor license agreements. See the NOTICE file distributed with
  5. * this work for additional information regarding copyright ownership.
  6. * The ASF licenses this file to You under the Apache License, Version 2.0
  7. * (the "License"); you may not use this file except in compliance with
  8. * the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. * ====================================================================
  18. */
  19. package org.apache.poi.xslf.model.geom;
  20. import java.awt.geom.Rectangle2D;
  21. import java.util.HashMap;
  22. import java.util.Map;
  23. /**
  24. * Date: 10/24/11
  25. *
  26. * @author Yegor Kozlov
  27. */
  28. public class Context {
  29. final Map<String, Double> _ctx = new HashMap<String, Double>();
  30. final IAdjustableShape _props;
  31. final Rectangle2D _anchor;
  32. public Context(CustomGeometry geom, Rectangle2D anchor, IAdjustableShape props){
  33. _props = props;
  34. _anchor = anchor;
  35. for(Guide gd : geom.adjusts) evaluate(gd);
  36. for(Guide gd : geom.guides) evaluate(gd);
  37. }
  38. public Rectangle2D getShapeAnchor(){
  39. return _anchor;
  40. }
  41. public Guide getAdjustValue(String name){
  42. return _props.getAdjustValue(name);
  43. }
  44. public double getValue(String key){
  45. if(key.matches("(\\+|-)?\\d+")){
  46. return Double.parseDouble(key);
  47. }
  48. Formula builtIn = Formula.builtInFormulas.get(key);
  49. if(builtIn != null){
  50. return builtIn.evaluate(this);
  51. }
  52. if(!_ctx.containsKey(key)) {
  53. throw new RuntimeException("undefined variable: " + key);
  54. }
  55. return _ctx.get(key);
  56. }
  57. public double evaluate(Formula fmla){
  58. double result = fmla.evaluate(this);
  59. String key = fmla.getName();
  60. if(key != null) _ctx.put(key, result);
  61. return result;
  62. }
  63. }