/*
* Copyright 2014 Buddycloud
*
* 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 com.buddycloud.mediaserver.web;
import com.buddycloud.mediaserver.business.dao.DAOFactory;
import com.buddycloud.mediaserver.business.dao.MediaDAO;
import com.buddycloud.mediaserver.commons.Constants;
import com.buddycloud.mediaserver.commons.exception.*;
import com.buddycloud.mediaserver.xmpp.XMPPToolBox;
import org.restlet.Request;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.EmptyRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Get;
/**
* Resource that represents /<channel>/<mediaId>/metadata endpoint.
*
* @author Rodrigo Duarte Sousa - rodrigodsousa@gmail.com
*/
public class MediaMetadataResource extends MediaServerResource {
/**
* Gets media's metadata (GET /<channel>/<mediaId>/metadata)
*/
@Get
public Representation getMediaMetadata() {
setServerHeader();
Request request = getRequest();
try {
String userJID = null;
String entityId = (String) request.getAttributes().get(Constants.ENTITY_ARG);
String mediaId = (String) request.getAttributes().get(Constants.MEDIA_ARG);
if (!mediaId.equals(Constants.AVATAR_ARG)) {
boolean isChannelPublic = XMPPToolBox.getInstance().getPubSubClient().isChannelPublic(entityId);
if (!isChannelPublic) {
userJID = getUsedJID(request, true);
}
}
MediaDAO mediaDAO = DAOFactory.getInstance().getDAO();
return new StringRepresentation(mediaDAO.getMediaInfo(userJID,
entityId, mediaId), MediaType.APPLICATION_JSON);
} catch (MetadataSourceException e) {
setStatus(Status.SERVER_ERROR_INTERNAL);
} catch (UserNotAllowedException e) {
setStatus(Status.CLIENT_ERROR_FORBIDDEN);
} catch (MediaNotFoundException e) {
setStatus(Status.CLIENT_ERROR_NOT_FOUND);
} catch (MissingAuthenticationException e) {
setStatus(Status.CLIENT_ERROR_UNAUTHORIZED);
return authenticationResponse();
} catch (XMPPException e) {
setStatus(Status.SERVER_ERROR_SERVICE_UNAVAILABLE);
} catch (Throwable t) {
return unexpectedError(t);
}
return new EmptyRepresentation();
}
}