Index: lams_central/conf/xdoclet/servlets.xml =================================================================== RCS file: /usr/local/cvsroot/lams_central/conf/xdoclet/servlets.xml,v diff -u -r1.14.2.2 -r1.14.2.3 --- lams_central/conf/xdoclet/servlets.xml 25 May 2007 05:49:06 -0000 1.14.2.2 +++ lams_central/conf/xdoclet/servlets.xml 1 Jun 2007 04:52:53 -0000 1.14.2.3 @@ -97,8 +97,8 @@ select distinct l.lesson_id, l.name from lams_fed_lesson fl, lams_lesson l, lams_fed_server s where fl.lesson_id=l.lesson_id - and fl.ext_org_id=${param.orgId java.lang.Integer} - and s.name=${param.name} + and fl.ext_org_id=${param.oid java.lang.Integer} + and s.fed_id=${param.fid} and fl.server_sid=s.sid and sha1(s.privatekey)=${param.h} Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/federation/FederationException.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/federation/dto/ExtLessonDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/federation/dto/ExtOrgDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/federation/service/FederationService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/federation/service/Attic/FederationService.java,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_common/src/java/org/lamsfoundation/lams/federation/service/FederationService.java 25 May 2007 05:42:06 -0000 1.1.2.1 +++ lams_common/src/java/org/lamsfoundation/lams/federation/service/FederationService.java 1 Jun 2007 04:52:52 -0000 1.1.2.2 @@ -3,17 +3,32 @@ */ package org.lamsfoundation.lams.federation.service; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.apache.log4j.Logger; +import org.lamsfoundation.lams.federation.FederationException; import org.lamsfoundation.lams.federation.FederationLesson; import org.lamsfoundation.lams.federation.FederationServer; +import org.lamsfoundation.lams.federation.dto.ExtLessonDTO; +import org.lamsfoundation.lams.federation.dto.ExtOrgDTO; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.HashUtil; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; /** * @author jliew @@ -42,7 +57,7 @@ } public List getCoursesCanJoinSharedLessons() { - List orgs = service.findByProperty(Organisation.class, "canJoinJointLessons", 1); + List orgs = service.findByProperty(Organisation.class, "canJoinJointLessons", true); ArrayList courses = new ArrayList(); for (Organisation o : orgs) { if (o.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.COURSE_TYPE)) { @@ -52,7 +67,7 @@ return courses; } - public List getSharedLessons(FederationServer fedServer, Integer extOrgId) { + public List getSharedLessons(FederationServer fedServer, Integer extOrgId) { HashMap properties = new HashMap(); properties.put("sid", fedServer.getSid()); properties.put("orgId", extOrgId); @@ -66,5 +81,119 @@ public void createFederationLesson(FederationServer fedServer, Integer extOrgId, Lesson lesson) { service.save(new FederationLesson(fedServer, extOrgId, lesson.getLessonId())); } - + + private FederationServer getFedServerByFedId(Integer fedId) throws FederationException { + List list = service.findByProperty(FederationServer.class, "fedId", fedId); + if (list == null || list.isEmpty()) { + throw new FederationException("Federation server with fed_id=" + fedId + " doesn't exist."); + } else { + return (FederationServer)list.get(0); + } + } + + private Document getXmlDocumentFromUrl(URL url) throws FederationException { + try { + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { + throw new FederationException("Response code when contacting "+url.getPath()+" is not OK: "+conn.getResponseCode()); + } + DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); + docBuilderFactory.setValidating(false); + return docBuilderFactory.newDocumentBuilder().parse(conn.getInputStream()); + } catch (MalformedURLException e) { + log.error(e); + } catch (IOException e) { + // java.net.ConnectException: Connection refused: connect (server not running) + log.error(e); + } catch (SAXException e) { + log.error(e); + } catch (ParserConfigurationException e) { + log.error(e); + } + return null; + } + + private ExtOrgDTO getExtOrgDTOFromNode(Node node) { + ExtOrgDTO dto = new ExtOrgDTO(); + + NodeList nodeList = node.getChildNodes(); + for (int i=0; i getFedServerGroups(Integer fedId) throws FederationException { + FederationServer fedServer = getFedServerByFedId(fedId); + String fedKey = HashUtil.sha1(fedServer.getPrivateKey()); + String urlText = fedServer.getUrl() + "/federation/groups?h=" + fedKey; + ArrayList list = new ArrayList(); + + try { + Document document = getXmlDocumentFromUrl(new URL(urlText)); + NodeList nodeList = document.getElementsByTagName("row"); + for (int i=0; i getFedServerLessons(Integer fedId, Integer orgId) throws FederationException { + FederationServer fedServer = getFedServerByFedId(fedId); + String fedKey = HashUtil.sha1(fedServer.getPrivateKey()); + String urlText = fedServer.getUrl() + "/federation/lessons?h=" + fedKey + "&oid=" + orgId + "&fid=" + fedServer.getFedId(); + ArrayList list = new ArrayList(); + + try { + Document document = getXmlDocumentFromUrl(new URL(urlText)); + NodeList nodeList = document.getElementsByTagName("row"); + for (int i=0; i getCoursesCanJoinSharedLessons(); - List getSharedLessons(FederationServer fedServer, Integer extOrgId); + List getSharedLessons(FederationServer fedServer, Integer extOrgId); void insertFederationServer(FederationServer fedServer); + /** + * Used when local teacher has selected external group/s to share their lesson with. + * @param fedServer + * @param extOrgId + * @param lesson + */ void createFederationLesson(FederationServer fedServer, Integer extOrgId, Lesson lesson); + + /** + * Used when local teacher is looking for external groups to share their lesson with. + * @return group ids and names from federation server with given fedId. + */ + List getFedServerGroups(Integer fedId) throws FederationException; + + /** + * Used to get list of lessons on remote server (fedId) available to org on this server (orgId). + * @param orgId + * @return lesson ids and names from federation server with given fed_id, available to org with given orgId. + */ + List getFedServerLessons(Integer fedId, Integer orgId) throws FederationException; } Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_common/test/java/org/lamsfoundation/lams/federation/TestFederationService.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/test/java/org/lamsfoundation/lams/test/AbstractCommonTestCase.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/test/Attic/AbstractCommonTestCase.java,v diff -u -r1.7 -r1.7.2.1 --- lams_common/test/java/org/lamsfoundation/lams/test/AbstractCommonTestCase.java 17 Sep 2006 06:14:17 -0000 1.7 +++ lams_common/test/java/org/lamsfoundation/lams/test/AbstractCommonTestCase.java 1 Jun 2007 04:52:52 -0000 1.7.2.1 @@ -45,7 +45,8 @@ protected String[] getContextConfigLocation() { return new String[] {"org/lamsfoundation/lams/localApplicationContext.xml", "org/lamsfoundation/lams/lesson/lessonApplicationContext.xml", - "org/lamsfoundation/lams/toolApplicationContext.xml"}; + "org/lamsfoundation/lams/toolApplicationContext.xml", + "org/lamsfoundation/lams/federationContext.xml"}; } /**