/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.test.rest;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.UUID;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.olat.restapi.RestConnection;
import org.olat.restapi.support.vo.CourseVO;
import org.olat.restapi.support.vo.RepositoryEntryVO;
import org.olat.test.ArquillianDeployments;
import org.olat.user.restapi.UserVO;
/**
*
* Initial date: 19.06.2014<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class RepositoryRestClient {
private final URL deploymentUrl;
private final String username;
private final String password;
public RepositoryRestClient(URL deploymentUrl) {
this(deploymentUrl, "administrator", "openolat");
}
public RepositoryRestClient(URL deploymentUrl, UserVO author) {
this.deploymentUrl = deploymentUrl;
this.username = author.getLogin();
this.password = author.getPassword();
}
public RepositoryRestClient(URL deploymentUrl, String username, String password) {
this.deploymentUrl = deploymentUrl;
this.username = username;
this.password = password;
}
public CourseVO deployDemoCourse()
throws URISyntaxException, IOException {
URL url = ArquillianDeployments.class.getResource("file_resources/Demo-Kurs-7.1.zip");
File archive = new File(url.toURI());
String displayname = "Demo-Kurs-" + UUID.randomUUID().toString();
return deployCourse(archive, "-", displayname);
}
public RepositoryEntryVO deployResource(File archive, String resourcename, String displayname)
throws URISyntaxException, IOException {
RestConnection conn = new RestConnection(deploymentUrl);
assertTrue(conn.login(username, password));
URI request = UriBuilder.fromUri(deploymentUrl.toURI()).path("restapi").path("repo").path("entries").build();
HttpPut method = conn.createPut(request, MediaType.APPLICATION_JSON, true);
String softKey = UUID.randomUUID().toString();
HttpEntity entity = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.addBinaryBody("file", archive, ContentType.APPLICATION_OCTET_STREAM, archive.getName())
.addTextBody("filename", archive.getName())
.addTextBody("resourcename", resourcename)
.addTextBody("displayname", displayname)
.addTextBody("access", "3")
.addTextBody("softkey", softKey)
.build();
method.setEntity(entity);
HttpResponse response = conn.execute(method);
assertTrue(response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201);
RepositoryEntryVO vo = conn.parse(response, RepositoryEntryVO.class);
assertNotNull(vo);
assertNotNull(vo.getDisplayname());
assertNotNull(vo.getKey());
return vo;
}
public CourseVO deployCourse(File archive, String resourcename, String displayname)
throws URISyntaxException, IOException {
RestConnection conn = new RestConnection(deploymentUrl);
assertTrue(conn.login(username, password));
URI request = UriBuilder.fromUri(deploymentUrl.toURI()).path("restapi").path("repo/courses").build();
HttpPost method = conn.createPost(request, MediaType.APPLICATION_JSON);
String softKey = UUID.randomUUID().toString();
HttpEntity entity = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.addBinaryBody("file", archive, ContentType.APPLICATION_OCTET_STREAM, archive.getName())
.addTextBody("filename", archive.getName())
.addTextBody("resourcename", resourcename)
.addTextBody("displayname", displayname)
.addTextBody("access", "3")
.addTextBody("softkey", softKey)
.build();
method.setEntity(entity);
HttpResponse response = conn.execute(method);
assertTrue(response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201);
CourseVO vo = conn.parse(response, CourseVO.class);
assertNotNull(vo);
assertNotNull(vo.getRepoEntryKey());
assertNotNull(vo.getKey());
return vo;
}
}