/*
* Copyright (c) 2009-2011 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.web.client.ui.common.form.elements.avatar.strategies;
import org.eurekastreams.server.domain.AvatarUrlGenerator;
import org.eurekastreams.server.domain.Bannerable;
import org.eurekastreams.server.domain.DomainGroup;
import org.eurekastreams.server.domain.EntityType;
import org.eurekastreams.server.search.modelview.DomainGroupModelView;
import org.eurekastreams.web.client.events.ClearUploadedImageEvent;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.ClearUploadedImageEvent.ImageType;
import org.eurekastreams.web.client.events.data.BaseDataResponseEvent;
import org.eurekastreams.web.client.events.data.DeleteGroupBannerResponseEvent;
import org.eurekastreams.web.client.model.Deletable;
import org.eurekastreams.web.client.model.GroupBannerModel;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
/**
* Banner uploadStratagy.
*
* @param <T>
* The Type of the Bannerable Entity.
*/
public class BannerUploadStrategy<T extends Bannerable> implements ImageUploadStrategy<T>
{
/**
* the entity.
*/
private final T entity;
/**
* Enum for type of Entity.
*/
private EntityType entityType;
/**
* Name of action to call for delete.
*/
private Deletable deleteAction;
/**
* EntityId of the entity being bannered.
*/
private final Long entityId;
/**
* Default constructor.
*
* @param inEntity
* the entity.
* @param inEntityId
* id of the entity to upload the banner for.
*/
public BannerUploadStrategy(final T inEntity, final Long inEntityId)
{
// TODO:Once the profile pages are entirely split from the domain models, refactor this to use DTO's correctly.
entity = inEntity;
entityId = inEntityId;
if (entity.getClass() == DomainGroup.class || entity.getClass() == DomainGroupModelView.class)
{
entityType = EntityType.GROUP;
deleteAction = GroupBannerModel.getInstance();
}
Session.getInstance().getEventBus().addObservers(new Observer<BaseDataResponseEvent<Bannerable>>()
{
public void update(final BaseDataResponseEvent<Bannerable> arg1)
{
Session.getInstance().getEventBus().notifyObservers(
new ClearUploadedImageEvent(entityType, ImageType.BANNER, arg1.getResponse()));
}
}, DeleteGroupBannerResponseEvent.class);
}
/**
* Gets the crop size.
*
* @return the crop size.
*/
public Integer getCropSize()
{
return null;
}
/**
* Gets the id of the entity.
*
* @return the id.
*/
public Long getId()
{
return entityId;
}
/**
* Gets the image id.
*
* @return the image id.
*/
public String getImageId()
{
return entity.getBannerId();
}
/**
* gets the crop X.
*
* @return the X.
*/
public Integer getX()
{
return null;
}
/**
* gets the crop Y.
*
* @return the crop y.
*/
public Integer getY()
{
return null;
}
/**
* Gets whether or not the strategy is resizable.
*
* @return the value.
*/
public Boolean isResizable()
{
return Boolean.FALSE;
}
/**
* sets the crop size.
*
* @param size
* the crop size.
*/
public void setCropSize(final Integer size)
{
// Not used because the banner is not resizable.
}
/**
* Sets the X coord of the image crop.
*
* @param x
* the x coord.
*/
public void setX(final Integer x)
{
// Not used because the banner is not resizable.
}
/**
* Sets the y coord of the image crop.
*
* @param y
* the y coord.
*/
public void setY(final Integer y)
{
// Not used because the banner is not resizable.
}
/**
* Gets the image.
*
* @param imageId
* the image id.
* @return the image.
*/
public FlowPanel getImage(final String imageId)
{
AvatarUrlGenerator urlGenerator = new AvatarUrlGenerator(entityType);
FlowPanel imageContainer = new FlowPanel();
imageContainer.addStyleName(StaticResourceBundle.INSTANCE.coreCss().banner());
imageContainer.add(new Image(urlGenerator.getBannerUrl(imageId)));
return imageContainer;
}
/**
* Gets the params to send to the delete action.
*
* @return the params.
*/
public Long getDeleteParam()
{
return entityId;
}
/**
* Gets the delete action key.
*
* @return the delete action key.
*/
public Deletable getDeleteAction()
{
return deleteAction;
}
/**
* Gets the resize action key. There is no resize action for Banner,
*
* @return Returns a blank String.
*/
public String getResizeAction()
{
return "";
}
/**
* Get the entity type.
*
* @return the entity type.
*/
public EntityType getEntityType()
{
return entityType;
}
/**
* Get the image type.
*
* @return the image type.
*/
public ImageType getImageType()
{
return ImageType.BANNER;
}
/**
* {@inheritDoc}.
*/
public Long getImageEntityId()
{
return entity.getBannerEntityId();
}
/**
* {@inheritDoc}
*/
public void setEntity(final T inEntity)
{
throw new UnsupportedOperationException("Updating entity not applicable to banner uploading.");
}
}