package nl.kennisnet.cpb.cloud.builders;

import org.mmbase.module.builders.Images;
import org.mmbase.module.core.MMObjectNode;
import org.mmbase.util.logging.Logger;
import org.mmbase.util.logging.Logging;

import java.util.*;
import java.io.ByteArrayInputStream;

import nl.kennisnet.cpb.util.ImageInfo;

/**
 * @author Robin van Meteren, Kennisnet I&O
 * @created on 21 april 2004, 16:05
 * @version $Revision: 1.1 $, $Date: 2004/04/21 14:32:35 $
 */
public class ImageBuilder extends Images {
   
   /** Logger instance. */
   private static Logger log = Logging.getLoggerInstance(CategoryBuilder.class.getName());
   
   private ImageInfo imageInfo;
   
   /** Creator. */
   public ImageBuilder() {
      imageInfo = new ImageInfo();
      log.debug("Constructed ImageBuilder");      
   }
   
   
   /** Executes a function on the field of a node, and returns the result.
    * @param node the node whose fields are queries
    * @param function The function to execute
    * @param inputFields ???
    * @return the result of the 'function', or null if no valid functions could be determined
    */
   public Object executeFunction(MMObjectNode node, String function, List inputFields) {
      log.debug("In the executeFunction method, called function = '" + function + "'");
      
      if ("width".equals(function)) {
         byte[] data = node.getByteValue("handle");      
         imageInfo.setInput(new ByteArrayInputStream(data));
         
         if (!imageInfo.check()) {
            log.service("ImageBuilder: Error parsing image");  
         }
         
         log.debug("ImageBuilder: width being returned = " + imageInfo.getWidth());
         return "" + imageInfo.getWidth();
      }
      else if ("height".equals(function)) {
         byte[] data = node.getByteValue("handle");      
         imageInfo.setInput(new ByteArrayInputStream(data));
         
         if (!imageInfo.check()) {
            log.service("ImageBuilder: Error parsing image");  
         }
         
         log.debug("ImageBuilder: height being returned = " + imageInfo.getHeight());
         return "" + imageInfo.getHeight();
      }
      
      return super.executeFunction(node, function, inputFields);
   }   
   
}

