00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.faces;
00023
00024 import com.realtime.crossfire.jxclient.util.ResourceUtils;
00025 import java.io.IOException;
00026 import org.jetbrains.annotations.NotNull;
00027 import org.jetbrains.annotations.Nullable;
00028
00038 public class DefaultFacesManager extends AbstractFacesManager {
00039
00043 @NotNull
00044 private final FaceQueue faceQueue;
00045
00049 @NotNull
00050 private final FaceImages unknownFaceImages;
00051
00055 @NotNull
00056 private final FaceImages emptyFaceImages;
00057
00061 @NotNull
00062 private final FaceQueueListener faceQueueListener = new FaceQueueListener() {
00063
00064 @Override
00065 public void faceLoaded(@NotNull final Face face, @NotNull final FaceImages faceImages) {
00066 face.setFaceImages(faceImages);
00067 fireFaceUpdated(face);
00068 }
00069
00070 @Override
00071 public void faceFailed(@NotNull final Face face) {
00072 face.setFaceImages(unknownFaceImages);
00073 fireFaceUpdated(face);
00074 }
00075
00076 };
00077
00084 public DefaultFacesManager(@NotNull final FaceCache faceCache, @NotNull final FaceQueue faceQueue) throws IOException {
00085 super(faceCache);
00086 this.faceQueue = faceQueue;
00087 faceQueue.addFaceQueueListener(faceQueueListener);
00088
00089 emptyFaceImages = FaceImagesUtils.newEmptyFaceImages();
00090 unknownFaceImages = FaceImagesUtils.newFaceImages(ResourceUtils.loadImage(ResourceUtils.UNKNOWN_PNG));
00091 }
00092
00100 @NotNull
00101 @Override
00102 protected FaceImages getFaceImages(final int faceNum, @Nullable final boolean[] isUnknownImage) {
00103 if (faceNum == 0) {
00104 if (isUnknownImage != null) {
00105 isUnknownImage[0] = false;
00106 }
00107 return emptyFaceImages;
00108 }
00109
00110 final Face face = lookupFace(faceNum);
00111 final FaceImages faceImages = face.getFaceImages();
00112 if (faceImages != null) {
00113 if (isUnknownImage != null) {
00114 isUnknownImage[0] = false;
00115 }
00116 return faceImages;
00117 }
00118
00119 faceQueue.loadFace(face);
00120 if (isUnknownImage != null) {
00121 isUnknownImage[0] = true;
00122 }
00123 return unknownFaceImages;
00124 }
00125
00129 @Override
00130 public void reset() {
00131 super.reset();
00132 faceQueue.reset();
00133 }
00134
00135 }