Gridarta Editor
AbstractBaseObject.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.model.baseobject;
21 
22 import java.awt.Point;
23 import java.util.Collection;
24 import java.util.Objects;
25 import javax.swing.ImageIcon;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
46 public abstract class AbstractBaseObject<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>, T extends BaseObject<G, A, R, T>> extends GameObjectContainer<G, A, R> implements BaseObject<G, A, R, T> {
47 
51  private static final long serialVersionUID = 1L;
52 
56  @NotNull
58 
63  @NotNull
65 
72  @Nullable
73  private String faceObjName;
74 
79  @NotNull
81 
86  @Nullable
87  private ImageIcon normalFace;
88 
92  @NotNull
93  private final transient FaceObjectProviders faceObjectProviders;
94 
99  @NotNull
100  private String objName = "";
101 
110  @Nullable
111  private StringBuilder msgText;
112 
117  private int mapX;
118 
123  private int mapY;
124 
129  @Nullable
131 
138  @Deprecated
139  // default arches don't get an editType (not worth the time)
140  // they get one assigned as soon as put on a map though.
141  // TODO: This should be changed.
142  private int editType = EDIT_TYPE_NONE;
143 
148  @Nullable
149  private String faceName;
150 
155  private int typeNo;
156 
161  @Nullable
162  private String animName;
163 
170  private int direction;
171 
175  @NotNull
176  private String loreText = "";
177 
185  this.faceObjectProviders = faceObjectProviders;
186  this.animationObjects = animationObjects;
187  }
188 
189  @Override
190  public int getTypeNo() {
191  return typeNo;
192  }
193 
198  private void setTypeNo(final int typeNo) {
199  if (this.typeNo == typeNo) {
200  return;
201  }
202 
204  try {
205  this.typeNo = typeNo;
206  } finally {
208  }
209  }
210 
215  private void setFaceName(@NotNull final String faceName) {
216  final String effectiveFaceName = getEffectiveFaceName(faceName);
217  //Strings are interned
218  //noinspection StringEquality
219  if (this.faceName == effectiveFaceName) {
220  return;
221  }
222 
224  try {
225  this.faceName = effectiveFaceName;
226  } finally {
228  }
229  }
230 
238  @Nullable
239  protected abstract String getEffectiveFaceName(@NotNull String faceName);
240 
241  @Nullable
242  @Override
243  public String getFaceName() {
244  return faceName;
245  }
246 
247  @Override
248  public int countInvObjects() {
249  int count = 0;
250  for (final BaseObject<G, A, R, ?> gameObject : this) {
251  count++;
252  count += gameObject.countInvObjects();
253  }
254  return count;
255  }
256 
257  @Override
258  public boolean hasAttribute(@NotNull final String attributeName, final boolean queryArchetype) {
259  return !getAttributeString(attributeName, queryArchetype).isEmpty();
260  }
261 
262  @Override
263  public boolean hasAttribute(@NotNull final String attributeName) {
264  return hasAttribute(attributeName, true);
265  }
266 
272  @Nullable
273  protected String getAttributeValue(@NotNull final String attributeName) {
274  return gameObjectText.getAttributeValue(attributeName);
275  }
276 
277  @NotNull
278  @Override
279  public String getAttributeString(@NotNull final String attributeName) {
280  return getAttributeString(attributeName, true);
281  }
282 
283  @Override
284  public int getAttributeInt(@NotNull final String attributeName, final boolean queryArchetype) {
285  return NumberUtils.parseInt(getAttributeString(attributeName, queryArchetype));
286  }
287 
288  @Override
289  public int getAttributeInt(@NotNull final String attributeName) {
290  return getAttributeInt(attributeName, true);
291  }
292 
293  @Override
294  public long getAttributeLong(@NotNull final String attributeName, final boolean queryArchetype) {
295  return NumberUtils.parseLong(getAttributeString(attributeName, queryArchetype));
296  }
297 
298  @Override
299  public long getAttributeLong(@NotNull final String attributeName) {
300  return getAttributeLong(attributeName, true);
301  }
302 
303  @Override
304  public double getAttributeDouble(@NotNull final String attributeName, final boolean queryArchetype) {
305  return NumberUtils.parseDouble(getAttributeString(attributeName, queryArchetype));
306  }
307 
308  @Override
309  public double getAttributeDouble(@NotNull final String attributeName) {
310  return getAttributeDouble(attributeName, true);
311  }
312 
313  @Override
314  public void setAttributeString(@NotNull final String attributeName, @NotNull final String value) {
315  final boolean sameAsInArchetype = getArchetype().getAttributeString(attributeName).equals(value);
316  if (!gameObjectText.setAttributeValue(attributeName, sameAsInArchetype, value, this)) {
317  return;
318  }
319 
321  }
322 
323  @Override
324  public void setAttributeInt(@NotNull final String attributeName, final int value) {
325  final boolean sameAsInArchetype = getArchetype().getAttributeInt(attributeName) == value;
326  if (!gameObjectText.setAttributeValue(attributeName, sameAsInArchetype, Integer.toString(value), this)) {
327  return;
328  }
329 
331  }
332 
333  @Override
334  public void removeAttribute(@NotNull final String attributeName) {
335  if (!gameObjectText.removeAttribute(attributeName, this)) {
336  return;
337  }
338 
340  }
341 
346  @Override
347  public abstract void notifyBeginChange();
348 
353  @Override
354  public abstract void notifyEndChange();
355 
359  protected void updateArchetype() {
361  try {
363  if (multi != null) {
364  final int multiShapeID = getArchetype().getMultiShapeID();
365  assert multi != null;
366  multi.setMultiShapeID(multiShapeID);
367  }
368  } finally {
370  }
371  }
372 
373  @Override
374  public int getEditType() {
375  return isHead() ? editType : getHead().getEditType();
376  }
377 
378  @Override
379  public void setEditType(final int editType) {
380  assert isHead();
381  if (this.editType == editType) {
382  return;
383  }
384 
385  this.editType = editType;
387  }
388 
389  @Override
390  public void addMsgTextLine(@NotNull final String text) {
391  // It's intentional that if text == null, msgText still is created if it's empty.
392  // FIXME: Though it's intentional, it's not nice, search for users and fix this.
393  // (Also look at deleteMsgText() and getMsgText() then)
394  if (msgText == null) {
395  msgText = new StringBuilder();
396  }
397 
399  try {
400  final String trimmedText = StringUtils.removeTrailingWhitespace(text);
401  assert msgText != null;
402  msgText.append(trimmedText);
403  assert msgText != null;
404  msgText.append('\n');
405  } finally {
407  }
408  }
409 
410  @Nullable
411  @Override
412  public String getMsgText(final boolean queryArchetype) {
413  if (msgText != null) {
414  return msgText.toString();
415  }
416  if (!queryArchetype) {
417  return null;
418  }
419  final R archetype = getArchetype();
420  return archetype == this ? null : archetype.getMsgText(queryArchetype);
421  }
422 
423  @Override
424  public void setMsgText(@Nullable final String msgText) {
425  final String trimmedMsgText = msgText == null ? null : StringUtils.removeTrailingWhitespaceFromLines(StringUtils.ensureTrailingNewline(msgText));
426  if (this.msgText == null ? trimmedMsgText == null : this.msgText.toString().equals(trimmedMsgText)) {
427  return;
428  }
429 
431  try {
432  if (trimmedMsgText == null) {
433  this.msgText = null;
434  } else if (this.msgText == null) {
435  this.msgText = new StringBuilder(trimmedMsgText);
436  } else {
437  this.msgText.setLength(0);
438  assert this.msgText != null;
439  this.msgText.append(trimmedMsgText);
440  }
441  } finally {
443  }
444  }
445 
446  @Override
447  public int getMapX() {
448  return mapX;
449  }
450 
451  @Override
452  public int getMapY() {
453  return mapY;
454  }
455 
456  @NotNull
457  @Override
458  public Point getMapLocation() {
459  return new Point(mapX, mapY);
460  }
461 
462  @Override
463  public void setMapX(final int mapX) {
464  this.mapX = mapX;
465  }
466 
467  @Override
468  public void setMapY(final int mapY) {
469  this.mapY = mapY;
470  }
471 
472  @Override
473  public boolean isHead() {
474  // == is okay because that's the definition of being head.
475  //noinspection ObjectEquality
476  return getHead() == this;
477  }
478 
479  @Nullable
480  @Override
481  public T getMultiNext() {
482  return multi == null ? null : multi.getNext(getThis());
483  }
484 
485  @Override
486  public int getMultiRefCount() {
487  return multi == null ? 0 : multi.getMultiRefCount();
488  }
489 
490  @Override
491  public void addTailPart(@NotNull final T tail) {
492  initMultiData();
493  assert multi != null;
494  tail.setMulti(multi);
495  assert multi != null;
496  multi.addPart(tail);
497  }
498 
499  @Override
500  public void removeTailParts() {
501  multi = null;
502  }
503 
504  @Override
505  public T getHead() {
506  return multi == null ? getThis() : multi.getHead();
507  }
508 
509  @Override
510  public boolean isTail() {
511  return getHead() != this;
512  }
513 
514  @Override
515  public int getSizeX() {
516  return multi == null ? 1 : multi.getSizeX();
517  }
518 
519  @Override
520  public int getSizeY() {
521  return multi == null ? 1 : multi.getSizeY();
522  }
523 
524  @Override
525  public int getMaxX() {
526  return multi == null ? 0 : multi.getMaxX();
527  }
528 
529  @Override
530  public int getMaxY() {
531  return multi == null ? 0 : multi.getMaxY();
532  }
533 
534  @Override
535  public int getMinX() {
536  return multi == null ? 0 : multi.getMinX();
537  }
538 
539  @Override
540  public int getMinY() {
541  return multi == null ? 0 : multi.getMinY();
542  }
543 
548  private void initMultiData() {
549  if (multi == null) {
550  multi = new MultiArchData<>(getThis(), getArchetype().getMultiShapeID());
551  }
552  }
553 
554  @Override
555  @NotNull
556  @SuppressWarnings("unchecked")
557  public T clone() {
559  // clone.archetype = archetype; // will NOT be cloned: archetypes are unique
560  clone.gameObjectText = new GameObjectText(gameObjectText);
561  if (msgText != null) {
562  clone.msgText = new StringBuilder(msgText);
563  }
564  clone.multi = null;
565  return clone.getThis();
566  }
567 
568  @Override
569  protected void setThisContainer(@NotNull final G gameObject) {
570  gameObject.setContainer(this, 0, 0);
571  }
572 
573  @NotNull
574  @Override
575  public String getObjName() {
576  return objName;
577  }
578 
583  private void setObjName(@NotNull final String objName) {
584  final String objName2 = objName.isEmpty() ? getArchetype().getArchetypeName() : objName;
585  final String newObjName = objName2.intern();
586  // Using == on these Strings is okay, they are both interned.
587  //noinspection StringEquality
588  if (this.objName == newObjName) {
589  return;
590  }
591 
593  try {
594  this.objName = newObjName;
595  } finally {
597  }
598  }
599 
600  @NotNull
601  @Override
602  public String getBestName() {
603  final String baseName;
604  if (objName.isEmpty()) {
605  final Archetype<G, A, R> archetype = getArchetype();
606  final String archObjName = archetype.getObjName();
607  baseName = archObjName.isEmpty() ? archetype.getArchetypeName() : archObjName;
608  } else {
609  baseName = objName;
610  }
611 
612  final String title = getAttributeString(TITLE);
613  return title.isEmpty() ? baseName : baseName + " " + title;
614  }
615 
616  @NotNull
617  @Override
618  public String getObjectText() {
619  return gameObjectText.getObjectText();
620  }
621 
622  @Override
623  public void addObjectText(@NotNull final String line) {
624  if (!gameObjectText.addObjectText(line, this)) {
625  return;
626  }
627 
629  }
630 
631  @Override
632  public void setObjectText(@NotNull final String objectText) {
633  if (!gameObjectText.setObjectText(objectText, this)) {
634  return;
635  }
636 
638  }
639 
640  @Override
641  public boolean isDefaultGameObject() {
642  final R archetype = getArchetype();
643  if (!objName.equals(archetype.getObjName())) {
644  return false;
645  }
647  return false;
648  }
649  if (msgText != null && !msgText.toString().equals(archetype.getMsgText(false))) {
650  return false;
651  }
652  if (faceName != null && !faceName.equals(archetype.getFaceName())) {
653  return false;
654  }
655  if (animName != null && !animName.equals(archetype.getAnimName())) {
656  return false;
657  }
658  return typeNo == archetype.getTypeNo();
659  }
660 
661  @Override
662  public boolean isEqual(@NotNull final BaseObject<?, ?, ?, ?> gameObject) {
663  if (!(gameObject instanceof AbstractBaseObject)) {
664  return false;
665  }
666  final AbstractBaseObject<?, ?, ?, ?> abstractBaseObject = (AbstractBaseObject<?, ?, ?, ?>) gameObject;
667  if (!hasSameContents(abstractBaseObject)) {
668  return false;
669  }
670  if (!Objects.equals(abstractBaseObject.faceObjName, faceObjName)) {
671  return false;
672  }
673  // ignore "faceObjSource"
674  // ignore "normalFace"
675  // ignore "container"
676  if (abstractBaseObject.getArchetype() != getArchetype()) {
677  return false;
678  }
679  if (!abstractBaseObject.getArchetype().getArchetypeName().equals(getArchetype().getArchetypeName())) {
680  return false;
681  }
682  if (!abstractBaseObject.objName.equals(objName)) {
683  return false;
684  }
685  if (!abstractBaseObject.gameObjectText.equals(gameObjectText)) {
686  return false;
687  }
688  if (abstractBaseObject.msgText == null ? msgText != null : msgText == null || !msgText.toString().equals(abstractBaseObject.msgText.toString())) {
689  return false;
690  }
691  // ignore "mapX"
692  // ignore "mapY"
693  // ignore "attributeCache"
694  // ignore "multi"
695  // ignore "editType"
696  if (!Objects.equals(abstractBaseObject.faceName, faceName)) {
697  return false;
698  }
699  if (!Objects.equals(abstractBaseObject.animName, animName)) {
700  return false;
701  }
702  if (abstractBaseObject.typeNo != typeNo) {
703  return false;
704  }
705  //noinspection RedundantIfStatement
706  if (abstractBaseObject.direction != direction) {
707  return false;
708  }
709  return true;
710  }
711 
712  @Override
713  public int getDirection() {
714  return direction;
715  }
716 
720  protected void beginGameObjectChange() {
721  if (multi == null) {
723  } else {
724  for (final BaseObject<G, A, R, T> part : multi) {
725  part.notifyBeginChange();
726  }
727  }
728  }
729 
733  protected void endGameObjectChange() {
734  if (multi == null) {
735  notifyEndChange();
736  } else {
737  for (final BaseObject<G, A, R, T> part : multi) {
738  part.notifyEndChange();
739  }
740  }
741  }
742 
747  private void transientGameObjectChange() {
748  if (multi == null) {
750  } else {
751  for (final BaseObject<G, A, R, T> part : multi) {
752  part.notifyTransientChange();
753  }
754  }
755  }
756 
757  @NotNull
758  @Override
760  return faceObjSource;
761  }
762 
767  private void setAnimName(@NotNull final String animName) {
768  final String newAnimName = animName.isEmpty() ? null : animName.intern();
769  // Using == on these Strings is okay, they are both interned.
770  //noinspection StringEquality
771  if (this.animName == newAnimName) {
772  return;
773  }
774 
776  try {
777  this.animName = newAnimName;
778  } finally {
780  }
781  }
782 
783  @Nullable
784  @Override
785  public String getAnimName() {
786  return animName;
787  }
788 
789  @Override
790  public boolean isMulti() {
791  return multi != null;
792  }
793 
799  @Nullable
801  return multi;
802  }
803 
804  @Override
805  public void setMulti(@NotNull final MultiArchData<G, A, R, T> multi) {
806  this.multi = multi;
807  }
808 
813  private void setFaceObjName(@Nullable final String faceObjName) {
814  final String newFaceObjName = faceObjName == null ? null : faceObjName.intern();
815  // Using == on these Strings is okay, they are both interned.
816  //noinspection StringEquality
817  if (this.faceObjName == newFaceObjName) {
818  return;
819  }
820 
822  try {
823  this.faceObjName = newFaceObjName;
824  } finally {
826  }
827  }
828 
829  @Nullable
830  @Override
831  public String getFaceObjName() {
832  return faceObjName;
833  }
834 
835  @Override
836  public void setObjectFace() {
837  @Nullable String effectiveAnimName;
839  effectiveAnimName = null;
841  } else if (animName != null) {
842  effectiveAnimName = animName;
844  } else if (getArchetype() != null) {
845  effectiveAnimName = getArchetype().getAnimName();
847  } else {
848  effectiveAnimName = null;
850  }
851  if (effectiveAnimName != null && effectiveAnimName.equals("NONE")) {
852  effectiveAnimName = null;
853  }
854 
855  @Nullable String effectiveFaceObjName;
856  if (effectiveAnimName == null) { // ok, we fallback to the face picture
857  if (faceName != null) {
858  effectiveFaceObjName = faceName;
860  } else if (getArchetype() != null) {
861  effectiveFaceObjName = getArchetype().getFaceName();
863  } else {
864  effectiveFaceObjName = null;
866  }
867  } else { // we have a animation - get the frame picture
868  final AnimationObject animationObject = animationObjects.get(effectiveAnimName);
869  if (animationObject == null) {
870  effectiveFaceObjName = null;
871  } else {
872  try {
873  effectiveFaceObjName = animationObject.getFirstFrame(direction);
874  } catch (final IndexOutOfBoundsException ignored) {
875  effectiveFaceObjName = null;
876  }
877  }
878  }
879 
880  setFaceObjName(effectiveFaceObjName);
881 
882  if (effectiveFaceObjName == null || faceObjectProviders.getImageIconForFacename(effectiveFaceObjName) == null) {
884  }
885  normalFace = null;
886  }
887 
888  @NotNull
889  @Override
890  public ImageIcon getNormalImage() {
891  if (normalFace == null) {
893  }
894  return normalFace;
895  }
896 
897  @NotNull
898  @Override
899  public String getLoreText() {
900  return loreText;
901  }
902 
903  @Override
904  public void setLoreText(@NotNull final CharSequence loreText) {
905  final String trimmedLoreText = StringUtils.removeTrailingWhitespace(loreText);
906  if (this.loreText.equals(trimmedLoreText)) {
907  return;
908  }
909 
911  try {
912  this.loreText = trimmedLoreText.intern();
913  } finally {
915  }
916  }
917 
918  @Override
919  public void facesReloaded() {
920  normalFace = null;
922  }
923 
924  @NotNull
925  @Override
926  public String toString(@NotNull final String format) {
927  final StringBuilder sb = new StringBuilder();
928  final char[] chars = format.toCharArray();
929  int pos = 0;
930  while (pos < chars.length) {
931  if (chars[pos] == '$' && pos + 2 < chars.length && chars[pos + 1] == '{') {
932  pos += 2;
933  final int startPos = pos;
934  int nesting = 1;
935  while (pos < chars.length) {
936  if (chars[pos] == '}') {
937  nesting--;
938  pos++;
939  if (nesting <= 0) {
940  break;
941  }
942  } else if (chars[pos] == '$' && pos + 1 < chars.length && chars[pos + 1] == '{') {
943  nesting++;
944  pos += 2;
945  } else {
946  pos++;
947  }
948  }
949  if (nesting > 0) {
950  sb.append("${");
951  pos++;
952  } else {
953  final int endPos = pos - 1;
954  assert startPos <= endPos;
955  final CharSequence spec = new String(chars, startPos, endPos - startPos);
956  final String[] tmp = StringUtils.PATTERN_COLON.split(spec, 2);
957  if (tmp.length < 2) {
958  if (tmp[0].equals("NAME")) {
959  sb.append(getBestName());
960  } else {
961  sb.append(getAttributeString(tmp[0]));
962  }
963  } else {
964  if (hasAttribute(tmp[0])) {
965  sb.append(toString(tmp[1]));
966  }
967  }
968  }
969  } else {
970  sb.append(chars[pos]);
971  pos++;
972  }
973  }
974 
975  return sb.toString();
976  }
977 
982  @NotNull
983  protected abstract T getThis();
984 
989  private void updateCachedAttributes() {
991  try {
997  setObjectFace();
998  } finally {
1000  }
1001  }
1002 
1007  @NotNull
1008  public Collection<String> getAttributeKeys() {
1010  }
1011 
1012 }
net.sf.gridarta.model.baseobject.AbstractBaseObject.typeNo
int typeNo
The object type.
Definition: AbstractBaseObject.java:155
net.sf.gridarta.model.baseobject.AbstractBaseObject.isDefaultGameObject
boolean isDefaultGameObject()
Definition: AbstractBaseObject.java:641
net.sf.gridarta.model.baseobject.AbstractBaseObject.countInvObjects
int countInvObjects()
Definition: AbstractBaseObject.java:248
net.sf.gridarta.model.baseobject.AbstractBaseObject.clone
T clone()
Definition: AbstractBaseObject.java:557
net.sf.gridarta.model.baseobject.AbstractBaseObject.getEditType
int getEditType()
Definition: AbstractBaseObject.java:374
net.sf.gridarta.model.gameobject.FaceSource.FACE
FACE
This GameObject has a normal face defined.
Definition: FaceSource.java:38
net.sf.gridarta.utils.NumberUtils.parseInt
static int parseInt(@NotNull final String s)
Parses an integer string.
Definition: NumberUtils.java:41
net.sf.gridarta.model.baseobject.AbstractBaseObject.setLoreText
void setLoreText(@NotNull final CharSequence loreText)
Definition: AbstractBaseObject.java:904
net.sf.gridarta.model.baseobject.AbstractBaseObject.getTypeNo
int getTypeNo()
Definition: AbstractBaseObject.java:190
net.sf.gridarta.model.baseobject.AbstractBaseObject.getHead
T getHead()
Definition: AbstractBaseObject.java:505
net.sf.gridarta.model.archetype.Archetype.getArchetypeName
String getArchetypeName()
Returns the name of this archetype.
net.sf.gridarta.model.baseobject.AbstractBaseObject.notifyEndChange
abstract void notifyEndChange()
@noinspection AbstractMethodOverridesAbstractMethod // needed because of public modifier
net.sf.gridarta.model.baseobject.AbstractBaseObject.gameObjectText
GameObjectText gameObjectText
The object text of this game object.
Definition: AbstractBaseObject.java:64
net.sf.gridarta.model.gameobject.MultiArchData.getMaxY
int getMaxY()
Returns the maximum y-coordinate of any part.
Definition: MultiArchData.java:137
net.sf.gridarta.model.baseobject.AbstractBaseObject.getDirection
int getDirection()
Definition: AbstractBaseObject.java:713
net.sf.gridarta.model.baseobject.AbstractBaseObject.setMapX
void setMapX(final int mapX)
Definition: AbstractBaseObject.java:463
net.sf.gridarta.model.baseobject.AbstractBaseObject.setObjectText
void setObjectText(@NotNull final String objectText)
Definition: AbstractBaseObject.java:632
net.sf.gridarta.model.baseobject.AbstractBaseObject.getSizeX
int getSizeX()
Definition: AbstractBaseObject.java:515
net.sf.gridarta.model.gameobject.FaceSource.ARCHETYPE_ANIM
ARCHETYPE_ANIM
This GameObject is animated but doesn't define an animation and thus inherited the animation from its...
Definition: FaceSource.java:55
net.sf.gridarta.model.gameobject.FaceSource
Enumeration describing the state of the face.
Definition: FaceSource.java:28
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.model.baseobject.AbstractBaseObject.setAttributeString
void setAttributeString(@NotNull final String attributeName, @NotNull final String value)
Definition: AbstractBaseObject.java:314
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeInt
int getAttributeInt(@NotNull final String attributeName, final boolean queryArchetype)
Definition: AbstractBaseObject.java:284
net.sf.gridarta.model.baseobject.AbstractBaseObject.getFaceObjSource
FaceSource getFaceObjSource()
Definition: AbstractBaseObject.java:759
net.sf.gridarta.utils.StringUtils.PATTERN_COLON
static final Pattern PATTERN_COLON
The pattern that matches a single colon (":").
Definition: StringUtils.java:91
net.sf.gridarta.model.gameobject.FaceSource.ANIM
ANIM
This GameObject has an animation defined.
Definition: FaceSource.java:49
net.sf.gridarta.model.anim.AnimationObjects
AnimationObjects is a container for AnimationObjects.
Definition: AnimationObjects.java:30
net.sf.gridarta.model.baseobject.AbstractBaseObject.loreText
String loreText
The map lore.
Definition: AbstractBaseObject.java:176
net.sf.gridarta.model.gameobject.MultiArchData
Class related to GameObject to store multi-part information.
Definition: MultiArchData.java:41
net.sf.gridarta.model.baseobject.GameObjectContainer< G, A, R >::hasSameContents
boolean hasSameContents( @NotNull final GameObjectContainer<?, ?, ?> gameObjectContainer)
Compares this object to another game object container.
Definition: GameObjectContainer.java:624
net.sf.gridarta.model.baseobject.GameObjectText
A set of key/value attributes.
Definition: GameObjectText.java:35
net.sf.gridarta.model.baseobject.AbstractBaseObject.beginGameObjectChange
void beginGameObjectChange()
Records that this game object is about to change.
Definition: AbstractBaseObject.java:720
net.sf.gridarta.model.gameobject.MultiArchData.getMultiRefCount
int getMultiRefCount()
Returns the number of parts this multi-part object contains.
Definition: MultiArchData.java:101
net.sf.gridarta.model.baseobject.GameObjectText.getAttributeValue
String getAttributeValue(@NotNull final String attributeName)
Returns an attribute value by attribute name.
Definition: GameObjectText.java:85
net.sf
net.sf.gridarta.model.data.NamedObjects.get
E get(@NotNull String objectName)
Gets a AbstractNamedObject.
net.sf.gridarta.model.baseobject.AbstractBaseObject.setFaceName
void setFaceName(@NotNull final String faceName)
Sets the face name.
Definition: AbstractBaseObject.java:215
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMapLocation
Point getMapLocation()
Definition: AbstractBaseObject.java:458
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMinY
int getMinY()
Definition: AbstractBaseObject.java:540
net.sf.gridarta.model.baseobject.AbstractBaseObject
Default implementation for GameObject implementing classes.
Definition: AbstractBaseObject.java:46
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeDouble
double getAttributeDouble(@NotNull final String attributeName, final boolean queryArchetype)
Definition: AbstractBaseObject.java:304
net.sf.gridarta.model.baseobject.AbstractBaseObject.direction
int direction
The direction determines to which direction the GameObject's face is facing.
Definition: AbstractBaseObject.java:170
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::TITLE
String TITLE
The attribute name of the object's title.
Definition: BaseObject.java:72
net.sf.gridarta.model.baseobject.AbstractBaseObject.faceName
String faceName
The name of the face.
Definition: AbstractBaseObject.java:149
net.sf.gridarta.model.baseobject.AbstractBaseObject.serialVersionUID
static final long serialVersionUID
The serial version UID.
Definition: AbstractBaseObject.java:51
net.sf.gridarta.model.gameobject.MultiArchData.setMultiShapeID
void setMultiShapeID(final int multiShapeID)
Sets the shape ID of this object.
Definition: MultiArchData.java:171
net.sf.gridarta.model.baseobject.AbstractBaseObject.transientGameObjectChange
void transientGameObjectChange()
Records that this game object has changed but need not be restored by undo/redo actions.
Definition: AbstractBaseObject.java:747
net.sf.gridarta.model.baseobject.AbstractBaseObject.notifyBeginChange
abstract void notifyBeginChange()
@noinspection AbstractMethodOverridesAbstractMethod // needed because of public modifier
net.sf.gridarta.model.baseobject.AbstractBaseObject.updateArchetype
void updateArchetype()
Called whenever getArchetype() has changed.
Definition: AbstractBaseObject.java:359
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMinX
int getMinX()
Definition: AbstractBaseObject.java:535
net.sf.gridarta.model.baseobject.AbstractBaseObject.mapX
int mapX
The map x position if on map.
Definition: AbstractBaseObject.java:117
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMultiRefCount
int getMultiRefCount()
Definition: AbstractBaseObject.java:486
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMapX
int getMapX()
Definition: AbstractBaseObject.java:447
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeLong
long getAttributeLong(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:299
net.sf.gridarta.model.face.FaceObjectProviders
Provider for faces of GameObjects and Archetypes.
Definition: FaceObjectProviders.java:46
net.sf.gridarta.model.gameobject.GameObject
Reflects a game object (object on a map).
Definition: GameObject.java:36
net.sf.gridarta.model.baseobject.GameObjectText.hasObjectText
boolean hasObjectText()
Returns whether an object text is set.
Definition: GameObjectText.java:128
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::NAME
String NAME
The attribute name of the object's name.
Definition: BaseObject.java:60
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeLong
long getAttributeLong(@NotNull final String attributeName, final boolean queryArchetype)
Definition: AbstractBaseObject.java:294
net.sf.gridarta.utils.NumberUtils.parseLong
static long parseLong(@NotNull final String s)
Parses a long string.
Definition: NumberUtils.java:68
net.sf.gridarta.model.baseobject.AbstractBaseObject.setMulti
void setMulti(@NotNull final MultiArchData< G, A, R, T > multi)
Definition: AbstractBaseObject.java:805
net.sf.gridarta.model.baseobject.AbstractBaseObject.isEqual
boolean isEqual(@NotNull final BaseObject<?, ?, ?, ?> gameObject)
Definition: AbstractBaseObject.java:662
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::IS_TURNABLE
String IS_TURNABLE
The name of the "is_turnable" attribute.
Definition: BaseObject.java:84
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::IS_ANIMATED
String IS_ANIMATED
The attribute name of the "is_animated" flag.
Definition: BaseObject.java:78
net.sf.gridarta.model.baseobject.AbstractBaseObject.hasAttribute
boolean hasAttribute(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:263
net.sf.gridarta.model.baseobject.AbstractBaseObject.getObjectText
String getObjectText()
Definition: AbstractBaseObject.java:618
net.sf.gridarta.model.baseobject.AbstractBaseObject.msgText
StringBuilder msgText
The message text.
Definition: AbstractBaseObject.java:111
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::getArchetype
R getArchetype()
Returns the Archetype this GameObject is based on.
net.sf.gridarta.model.baseobject.AbstractBaseObject.setFaceObjName
void setFaceObjName(@Nullable final String faceObjName)
Sets the effective face name.
Definition: AbstractBaseObject.java:813
net.sf.gridarta.model.baseobject.AbstractBaseObject.setMapY
void setMapY(final int mapY)
Definition: AbstractBaseObject.java:468
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::EDIT_TYPE_NONE
int EDIT_TYPE_NONE
Definition: BaseObject.java:36
net.sf.gridarta.model.baseobject.AbstractBaseObject.addMsgTextLine
void addMsgTextLine(@NotNull final String text)
Definition: AbstractBaseObject.java:390
net.sf.gridarta.model.baseobject.AbstractBaseObject.setTypeNo
void setTypeNo(final int typeNo)
Sets the type number of this Archetype.
Definition: AbstractBaseObject.java:198
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeInt
int getAttributeInt(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:289
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMulti
MultiArchData< G, A, R, T > getMulti()
Returns the MultiArchData for this base object.
Definition: AbstractBaseObject.java:800
net.sf.gridarta.utils.StringUtils.removeTrailingWhitespace
static String removeTrailingWhitespace(@NotNull final CharSequence str)
Removes trailing whitespace from a string.
Definition: StringUtils.java:123
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net.sf.gridarta.model.baseobject.AbstractBaseObject.facesReloaded
void facesReloaded()
Definition: AbstractBaseObject.java:919
net
net.sf.gridarta.model.baseobject.GameObjectText.setObjectText
boolean setObjectText(@NotNull final String objectText, @NotNull final AbstractBaseObject<?, ?, ?, ?> baseObject)
Sets the object text.
Definition: GameObjectText.java:162
net.sf.gridarta.model.baseobject.AbstractBaseObject.mapY
int mapY
The map y position if on map.
Definition: AbstractBaseObject.java:123
net.sf.gridarta.model.gameobject.MultiArchData.getMaxX
int getMaxX()
Returns the maximum x-coordinate of any part.
Definition: MultiArchData.java:128
net.sf.gridarta.model.baseobject.AbstractBaseObject.setMsgText
void setMsgText(@Nullable final String msgText)
Definition: AbstractBaseObject.java:424
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeDouble
double getAttributeDouble(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:309
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::FACE
String FACE
The attribute name of the object's face.
Definition: BaseObject.java:54
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMaxY
int getMaxY()
Definition: AbstractBaseObject.java:530
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.model.baseobject.AbstractBaseObject.getNormalImage
ImageIcon getNormalImage()
Definition: AbstractBaseObject.java:890
net.sf.gridarta.model.baseobject.AbstractBaseObject.animName
String animName
The object's animation animation.
Definition: AbstractBaseObject.java:162
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMsgText
String getMsgText(final boolean queryArchetype)
Definition: AbstractBaseObject.java:412
net.sf.gridarta.model.gameobject.MultiArchData.getNext
T getNext(@NotNull final T ob)
Returns the part following a given part.
Definition: MultiArchData.java:191
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMultiNext
T getMultiNext()
Definition: AbstractBaseObject.java:481
net.sf.gridarta.model.baseobject.GameObjectText.removeAttribute
boolean removeAttribute(@NotNull final String attributeName, @NotNull final AbstractBaseObject<?, ?, ?, ?> baseObject)
Removes an attribute.
Definition: GameObjectText.java:209
net.sf.gridarta.model.baseobject.AbstractBaseObject.getEffectiveFaceName
abstract String getEffectiveFaceName(@NotNull String faceName)
Returns the effective face name for faceName for a given real face name.
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeValue
String getAttributeValue(@NotNull final String attributeName)
Returns an attribute value by attribute name.
Definition: AbstractBaseObject.java:273
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeKeys
Collection< String > getAttributeKeys()
Returns all attribute keys of this object.
Definition: AbstractBaseObject.java:1008
net.sf.gridarta.model.gameobject.MultiArchData.getHead
T getHead()
Returns the head part of this multi-part object.
Definition: MultiArchData.java:180
net.sf.gridarta.model.baseobject.AbstractBaseObject.setEditType
void setEditType(final int editType)
Definition: AbstractBaseObject.java:379
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAnimName
String getAnimName()
Definition: AbstractBaseObject.java:785
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMapY
int getMapY()
Definition: AbstractBaseObject.java:452
net.sf.gridarta.model.face.FaceObjectProviders.getFace
public< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > ImageIcon getFace(@NotNull final BaseObject< G, A, R, ?> baseObject)
Returns the face of a BaseObject as an ImageIcon.
Definition: FaceObjectProviders.java:251
net.sf.gridarta.model.baseobject.AbstractBaseObject.getFaceObjName
String getFaceObjName()
Definition: AbstractBaseObject.java:831
net.sf.gridarta.model.baseobject.AbstractBaseObject.setAnimName
void setAnimName(@NotNull final String animName)
Sets object animation.
Definition: AbstractBaseObject.java:767
net.sf.gridarta.model.baseobject.AbstractBaseObject.faceObjSource
FaceSource faceObjSource
The state where the face comes from.
Definition: AbstractBaseObject.java:80
net.sf.gridarta.model.gameobject.MultiArchData.getSizeX
int getSizeX()
Returns the horizontal extent in squares.
Definition: MultiArchData.java:110
net.sf.gridarta.model.baseobject.BaseObject
Definition: BaseObject.java:34
net.sf.gridarta.utils.StringUtils
Utility class for string manipulation.
Definition: StringUtils.java:31
net.sf.gridarta.model.baseobject.AbstractBaseObject.getSizeY
int getSizeY()
Definition: AbstractBaseObject.java:520
net.sf.gridarta.model.baseobject.AbstractBaseObject.AbstractBaseObject
AbstractBaseObject(@NotNull final FaceObjectProviders faceObjectProviders, @NotNull final AnimationObjects animationObjects)
Creates a new instance.
Definition: AbstractBaseObject.java:184
net.sf.gridarta.model.baseobject.AbstractBaseObject.setObjName
void setObjName(@NotNull final String objName)
Sets the name of this object.
Definition: AbstractBaseObject.java:583
net.sf.gridarta.model.baseobject.AbstractBaseObject.setAttributeInt
void setAttributeInt(@NotNull final String attributeName, final int value)
Definition: AbstractBaseObject.java:324
net.sf.gridarta.utils.NumberUtils.parseDouble
static double parseDouble(@NotNull final String s)
Parses a double string.
Definition: NumberUtils.java:85
net.sf.gridarta.model.baseobject.AbstractBaseObject.setObjectFace
void setObjectFace()
Definition: AbstractBaseObject.java:836
net.sf.gridarta.model.baseobject.AbstractBaseObject.getLoreText
String getLoreText()
Definition: AbstractBaseObject.java:899
net.sf.gridarta.model.baseobject.AbstractBaseObject.normalFace
ImageIcon normalFace
The normal face.
Definition: AbstractBaseObject.java:87
net.sf.gridarta.model.baseobject.AbstractBaseObject.getThis
abstract T getThis()
Returns.
net.sf.gridarta.model.baseobject.AbstractBaseObject.editType
int editType
Edit Type.
Definition: AbstractBaseObject.java:142
net.sf.gridarta.model.baseobject.AbstractBaseObject.getAttributeString
String getAttributeString(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:279
net.sf.gridarta.model.baseobject.BaseObject.getObjName
String getObjName()
Returns the name of the object as shown to the player.
net.sf.gridarta.model.baseobject.GameObjectContainer< G, A, R >::toString
String toString()
Definition: GameObjectContainer.java:654
net.sf.gridarta.model.baseobject.AbstractBaseObject.isMulti
boolean isMulti()
Definition: AbstractBaseObject.java:790
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.model.baseobject.AbstractBaseObject.initMultiData
void initMultiData()
Initialize the multi-part data object - must only be called for multi-part arches.
Definition: AbstractBaseObject.java:548
net.sf.gridarta.utils.StringUtils.ensureTrailingNewline
static CharSequence ensureTrailingNewline(@NotNull final String str)
Returns a given string which ends with a trailing newline character; empty strings remain empty.
Definition: StringUtils.java:146
net.sf.gridarta.model.baseobject.AbstractBaseObject.removeTailParts
void removeTailParts()
Definition: AbstractBaseObject.java:500
net.sf.gridarta.model.baseobject.AbstractBaseObject.getBestName
String getBestName()
Definition: AbstractBaseObject.java:602
net.sf.gridarta.model.baseobject.AbstractBaseObject.hasAttribute
boolean hasAttribute(@NotNull final String attributeName, final boolean queryArchetype)
Definition: AbstractBaseObject.java:258
net.sf.gridarta.model.baseobject.AbstractBaseObject.setThisContainer
void setThisContainer(@NotNull final G gameObject)
Definition: AbstractBaseObject.java:569
net.sf.gridarta.model.gameobject.MultiArchData.getMinY
int getMinY()
Returns the minimum y-coordinate of any part.
Definition: MultiArchData.java:155
net.sf.gridarta.model.baseobject.AbstractBaseObject.objName
String objName
The name of this object.
Definition: AbstractBaseObject.java:100
net.sf.gridarta.model.face
The face is the appearance of an object.
Definition: AbstractFaceObjects.java:20
net.sf.gridarta.model.baseobject.AbstractBaseObject.multi
MultiArchData< G, A, R, T > multi
Data for multi-part objects.
Definition: AbstractBaseObject.java:130
net.sf.gridarta.model.anim
Gridarta can handle frame information of animations and allow the selection of an animation using a t...
Definition: AbstractAnimationObjects.java:20
net.sf.gridarta.model.baseobject.AbstractBaseObject.addObjectText
void addObjectText(@NotNull final String line)
Definition: AbstractBaseObject.java:623
net.sf.gridarta.model.baseobject.AbstractBaseObject.getObjName
String getObjName()
Definition: AbstractBaseObject.java:575
net.sf.gridarta.model.gameobject.MultiArchData.addPart
void addPart(@NotNull final T tail)
Adds a part to this multi-part object.
Definition: MultiArchData.java:201
net.sf.gridarta.model.baseobject.AbstractBaseObject.isTail
boolean isTail()
Definition: AbstractBaseObject.java:510
net.sf.gridarta.model.baseobject.AbstractBaseObject.getMaxX
int getMaxX()
Definition: AbstractBaseObject.java:525
net.sf.gridarta.model.baseobject.AbstractBaseObject.removeAttribute
void removeAttribute(@NotNull final String attributeName)
Definition: AbstractBaseObject.java:334
net.sf.gridarta.model.baseobject.AbstractBaseObject.isHead
boolean isHead()
Definition: AbstractBaseObject.java:473
net.sf.gridarta.model.anim.AnimationObject
An AnimationObject reflects the animation ("@code anim\n @endcode " ...
Definition: AnimationObject.java:30
net.sf.gridarta.model.gameobject.FaceSource.ARCHETYPE_FACE
ARCHETYPE_FACE
This GameObject has no face defined and thus inherited the face from its archetype.
Definition: FaceSource.java:44
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.model.baseobject.AbstractBaseObject.faceObjName
String faceObjName
Face name, can be from animation or face.
Definition: AbstractBaseObject.java:73
net.sf.gridarta.model.gameobject.MultiArchData.getSizeY
int getSizeY()
Returns the vertical extent in squares.
Definition: MultiArchData.java:119
net.sf.gridarta.model.baseobject.AbstractBaseObject.animationObjects
final AnimationObjects animationObjects
The AnimationObjects for looking up animations.
Definition: AbstractBaseObject.java:57
net.sf.gridarta.model.baseobject.AbstractBaseObject.endGameObjectChange
void endGameObjectChange()
Records that this game object has changed.
Definition: AbstractBaseObject.java:733
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::TYPE
String TYPE
The attribute name of the object's type.
Definition: BaseObject.java:66
net.sf.gridarta.utils.StringUtils.removeTrailingWhitespaceFromLines
static String removeTrailingWhitespaceFromLines(@NotNull final CharSequence str)
Removes trailing whitespace from all lines of a string.
Definition: StringUtils.java:133
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::notifyTransientChange
void notifyTransientChange()
Notifies the map model that this container has changed but need not be restored by undo/redo.
net.sf.gridarta.model.baseobject.BaseObject.countInvObjects
int countInvObjects()
Counts the number of all inventory items (recursively).
net.sf.gridarta.model.gameobject.FaceSource.FACE_NOT_FOUND
FACE_NOT_FOUND
The face of this GameObject was not found.
Definition: FaceSource.java:33
net.sf.gridarta.model.baseobject.AbstractBaseObject.getFaceName
String getFaceName()
Definition: AbstractBaseObject.java:243
net.sf.gridarta.model.baseobject.GameObjectContainer
Base class for classes that contain GameObjects as children in the sense of containment.
Definition: GameObjectContainer.java:50
net.sf.gridarta.model.baseobject.AbstractBaseObject.addTailPart
void addTailPart(@NotNull final T tail)
Definition: AbstractBaseObject.java:491
net.sf.gridarta.model.baseobject.GameObjectText.getAttributeKeys
Collection< String > getAttributeKeys()
Returns all attribute keys of this object.
Definition: GameObjectText.java:261
net.sf.gridarta.model.baseobject.GameObjectText.setAttributeValue
boolean setAttributeValue(@NotNull final String attributeName, final boolean sameAsInArchetype, @NotNull final String value, @NotNull final AbstractBaseObject<?, ?, ?, ?> baseObject)
Updates an attribute's value.
Definition: GameObjectText.java:230
net.sf.gridarta.model.baseobject.AbstractBaseObject.toString
String toString(@NotNull final String format)
Definition: AbstractBaseObject.java:926
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::ANIMATION
String ANIMATION
The attribute name of the object's animation.
Definition: BaseObject.java:42
net.sf.gridarta.model.anim.AnimationObject.getFirstFrame
String getFirstFrame(int facing)
Get the first frame.
net.sf.gridarta.model.baseobject.GameObjectText.addObjectText
boolean addObjectText(@NotNull final String line, @NotNull final AbstractBaseObject<?, ?, ?, ?> baseObject)
Appends a line to the object text.
Definition: GameObjectText.java:139
net.sf.gridarta.model.baseobject.GameObjectText.getObjectText
String getObjectText()
Returns the object text.
Definition: GameObjectText.java:120
net.sf.gridarta.model.face.FaceObjectProviders.getImageIconForFacename
ImageIcon getImageIconForFacename(@NotNull final String faceObjName)
Returns the ImageIcon for a given face object name.
Definition: FaceObjectProviders.java:367
net.sf.gridarta.utils.NumberUtils
Utility class for parsing strings into numbers.
Definition: NumberUtils.java:28
net.sf.gridarta.model.baseobject.BaseObject< G, A, R, T >::DIRECTION
String DIRECTION
The attribute name of the object's direction.
Definition: BaseObject.java:48
net.sf.gridarta.model.gameobject.MultiArchData.getMinX
int getMinX()
Returns the minimum x-coordinate of any part.
Definition: MultiArchData.java:146
net.sf.gridarta.model.baseobject.AbstractBaseObject.updateCachedAttributes
void updateCachedAttributes()
Updates attribute values that are cached.
Definition: AbstractBaseObject.java:989
net.sf.gridarta.model.baseobject.AbstractBaseObject.faceObjectProviders
final transient FaceObjectProviders faceObjectProviders
The FaceObjectProviders for looking up faces.
Definition: AbstractBaseObject.java:93