00001 /* 00002 * Copyright (C) 2012 Google Inc. 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 00005 * use this file except in compliance with the License. You may obtain a copy of 00006 * the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 00013 * License for the specific language governing permissions and limitations under 00014 * the License. 00015 */ 00016 00017 package org.ros.rosjava_geometry; 00018 00019 import com.google.common.annotations.VisibleForTesting; 00020 00029 public class LazyFrameTransform { 00030 00031 private final geometry_msgs.TransformStamped message; 00032 00033 // Avoiding constructor code duplication. 00034 private final Object mutex = new Object(); 00035 00036 private FrameTransform frameTransform; 00037 00038 public LazyFrameTransform(geometry_msgs.TransformStamped message) { 00039 this.message = message; 00040 } 00041 00042 @VisibleForTesting 00043 LazyFrameTransform(FrameTransform frameTransform) { 00044 message = null; 00045 this.frameTransform = frameTransform; 00046 } 00047 00052 public FrameTransform get() { 00053 synchronized (mutex) { 00054 if (frameTransform != null) { 00055 return frameTransform; 00056 } 00057 frameTransform = FrameTransform.fromTransformStampedMessage(message); 00058 } 00059 return frameTransform; 00060 } 00061 }