[Building Sakai] A question about how to use some APIs in project Profile2

Steve Swinsburg steve.swinsburg at gmail.com
Fri Nov 13 01:44:11 PST 2009


Looks good, one more thing to do and that is to add the appropraite  
GradebookService dependency to the impl/pom.xml.

I'm still waiting to hear back on which GradebookService is meant to  
be used, as looking through the Javadocs there are a few.

cheers,
Steve



On 13/11/2009, at 5:01 PM, Hai Vo Thanh wrote:

> i've just injected GradebookService in to SakaiProxy like this:
>
> in SakaiProxy.java : add a prototype int getNumberOfAssignment 
> (String gradebookUid);
>
> in SakaiProxyImpl.java:
>
>             import some package:
>                 import org.sakaiproject.service.gradebook.shared.*;
>                 import  
> org.sakaiproject.service.gradebook.shared.GradebookService;
>                 import  
> org.sakaiproject.service.gradebook.shared.Assignment;
>                 //import org.sakaiproject.tool.gradebook.Assignment;
>                 import org.sakaiproject.assignment.api.*;
>
>             create a setter for the GradebookService :
>                 private GradebookService gradebookService;
>                 public void setGradebookService(GradebookService  
> gradebookService){
>                    this.gradebookService = gradebookService;
>                 }
>
>             implement the api:
>                 public int getNumberOfAssignment(String gradebookUid){
>                     return gradebookService.getAssignments 
> (gradebookUid).size();
>                 }
>
> in components.xml: add the following line into the bean.
>                 <property name="gradebookService"><ref  
> bean="org.sakaiproject.service.gradebook.shared.GradebookService"/></ 
> property>
>
> and when i deploy. These errors appeared:
> [INFO]  
> ------------------------------------------------------------------------
> [INFO] Compilation failure
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[40,0] package org.sakaiproject.service.gradebook.shared does  
> not exist
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[41,49] package org.sakaiproject.service.gradebook.shared does  
> not exist
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[42,49] package org.sakaiproject.service.gradebook.shared does  
> not exist
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[44,0] package org.sakaiproject.assignment.api does not exist
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[913,16] cannot find symbol
> symbol  : class GradebookService
> location: class org.sakaiproject.profile2.logic.SakaiProxyImpl
>
> C:\sakai\myprofile2\impl\src\java\org\sakaiproject\profile2\logic 
> \SakaiProxyImpl
> .java:[914,40] cannot find symbol
> symbol  : class GradebookService
> location: class org.sakaiproject.profile2.logic.SakaiProxyImpl
>
>
> Did i miss any stage?
> Thanks
> ---------------
> Hai Vo
>
> From: Steve Swinsburg <steve.swinsburg at gmail.com>
> To: Hai Vo Thanh <v0thanhhai at yahoo.com>
> Cc: sakai-dev <sakai-dev at collab.sakaiproject.org>
> Sent: Fri, November 13, 2009 5:41:14 AM
> Subject: Re: [Building Sakai] A question about how to use some APIs  
> in project Profile2
>
> Hi,
>
> You'll need a setter for the gradebookService API that you are  
> injecting. Might be easiest to inject into SakaiProxy, you can see  
> the config in components.xml already. Then add a setter to it like  
> the rest of the Sakai services are. Then add your method stub to  
> SakaiProxy.java and implement it in SakaiProxyImpl.java
>
> I posted a message about which service to use in a different thread,  
> keep an eye on responses there as well.
>
> cheers,
> Steve
>
> On Fri, Nov 13, 2009 at 8:48 AM, Hai Vo Thanh <v0thanhhai at yahoo.com>  
> wrote:
> Hi Mr Steve Swinsburg, i am his co-worker, we are doing some  
> expansion for the Profile2 project. At this time, we are creating a  
> new page in the display screen ( same as My profile, Connections,  
> Search....) this page is using for display all grades of student  
> have had. Whenever he come to this page, he can see all his grades  
> profile. Cause we do not want to change the original project, we  
> created some new class in the package  
> org.sakaiproject.profile2.tool.pages . at this time, we can get a  
> LinkedList<String> of all site id of all course that one user joined  
> and display it on my new page. Cause the siteId is also the  
> gradebookUid, we try to use the GradebookService to get all the  
> Assignment of each site, and at this state we encountered the problem.
>
> I created a new class called MyGradebookApi to inject the  
> GradebookService in to our application. For testing i've create two  
> method
>
>    public int getNumberOfAss(String gradebookUid){
>         return gradebookService.getAssignments(gradebookUid).size();
>     }
>
> and......
>
>     public LinkedList<String> getAssNameList(String gradebookUid){
>         LinkedList<String> assNameList =new LinkedList();
>         LinkedList<Assignment> assList = new LinkedList();
>
>         List<Assignment> tempList = gradebookService.getAssignments 
> (gradebookUid);
>         assList.addAll(tempList);
>
>
>         while(!assList.isEmpty()){
>             Assignment tempAss = assList.remove();
>             String name = tempAss.getName();
>             assNameList.add(name);
>         }
>         return assNameList;
>     }
>  but it seem the GradeBookService do not work, i created a cousre  
> site, i got its siteId, i created some sample Assignment, then in my  
> page, i called the method getNumberOfAss and try to display in my  
> page, but nothing happened.
>
> The tool deployed sucessful, cause i modified the pom.xml to add  
> some dependencies.
> In my class i imported:
>     import org.sakaiproject.service.gradebook.shared.*;
>     import org.sakaiproject.service.gradebook.shared.Assignment;
>     //import org.sakaiproject.tool.gradebook.Assignment;
>     import org.sakaiproject.assignment.api.*;
>     import java.util.LinkedList;
>     import java.util.List;
> and create a private variable: private GradebookService  
> gradebookService;
>
> Did i miss any step? Could you give me some advices please?
>
> Thanks and regards
> ========
> Hai Vo
>
>
> From: Steve Swinsburg <steve.swinsburg at gmail.com>
> To: Small Cat <shadowless4288 at gmail.com>
> Cc: sakai-dev at collab.sakaiproject.org
> Sent: Fri, November 13, 2009 4:08:48 AM
> Subject: Re: [Building Sakai] A question about how to use some APIs  
> in project Profile2
>
> If using Spring, inject the actual API, not the static cover.  
> However, don't inject into the tool.
>
> Since you seem to be modifying Profile2, inject the GradebookService  
> into SakaiProxy.java which is where I have kept all Sakai related  
> API calls. That is already injected into all Tool pages so you can  
> just call sakaiProxy.someMethod() to do things.
>
> Could you let me know what additions you are making to Profile2? Are  
> you wanting to contribute them back to the main release of Profile2?
>
> cheers,
> Steve
>
>
> On 13/11/2009, at 6:26 AM, Small Cat wrote:
>
>> ... I want to add a new page using gradebook service into profile  
>> 2, I name this page "MyHello.html" and implement it in MyHello.java  
>> & MyQuery.java (this class in a new package  
>> org.sakaiproject.profile2.tool.mysql    )
>>
>> I've already use some other service like database api, site  
>> service  by using cover (but I fell in using methods of adding bean  
>> in compponents.xml >"<). But the problem is that I can't found  
>> gradebook cover ...
>> I tried to inject it follow these steps :( I use sakai 2.5.5 )
>> - add dependency in maven file
>> <dependency>
>>             <groupId>org.sakaiproject</groupId>
>>             <artifactId>sakai-gradebook-service-api</artifactId>
>>             <version>${sakai.version}</version>
>>         </dependency>
>> - add bean in components
>> <bean id="org.sakaiproject.profile2.tool.mysql.MyQuery"
>>         class="org.sakaiproject.profile2.tool.mysql.MyQuery">
>>         <property name="gradebookService"
>>             ref="org.sakaiproject.service.gradebook.shared.*">
>>         </property>
>>     </bean>
>> - coding...and this is a test function to get some assignment name  
>> ( I think gradebookId = coursesiteID , it is right ? )
>> // courseList is a list of course site id
>> public LinkedList<String> getAssignmentNameList(
>>             LinkedList<String> courseList) {
>>         LinkedList<Assignment> assignmentList = new LinkedList();
>>         try {
>>             while (!courseList.isEmpty()) {
>>                 String tmpString = courseList.remove();
>>                 List<Assignment> tmpList = gradebookService
>>                         .getAssignments(tmpString);
>>                 assignmentList.addAll(tmpList);
>>             }
>>         } catch (Exception e) {
>>             e.printStackTrace();
>>         }
>>
>>         LinkedList<String> assignmentNameList = new LinkedList();
>>         try {
>>             while (!assignmentList.isEmpty()) {
>>                 assignmentNameList.add(assignmentList.remove 
>> ().getName());
>>             }
>>         } catch (Exception e) {
>>             e.printStackTrace();
>>         }
>>         return assignmentNameList;
>>     }
>> /**************************************************************/
>>
>>  I tried like that in Sakai and it return nothing >"<.
>> Can anyone help me ?
>>
>>
>>
>> 2009/11/6 Steve Swinsburg <steve.swinsburg at gmail.com>
>> You've got a ; in the bean definitions, not sure if that matters  
>> too much though. But as for the dependency in the pom, if matters  
>> if you are on 2.5 or 2.6+. If 2.6 then you don't need that  
>> dependency as its in the kernel but for 2.5 you will.
>>
>> Also, are you modifying the current Profile2 tool? ie
>> http://confluence.sakaiproject.org/display/PROFILE/Profile2
>>
>> I am currently polishing up release of Profile2 for possible  
>> inclusion in 2.7 so it would be good to coordinate efforts here.
>>
>> cheers,
>> Steve
>>
>>
>> On 06/11/2009, at 3:47 PM, Small Cat wrote:
>>
>>> Hi,
>>> In the components.xml, I added a bean for my class as :
>>>
>>> <!--  MyPortfolios -->
>>>     <bean id =  
>>> "org.sakaiproject.profile2.tool.myportfolios.MyPortfolios;"
>>>          
>>> class="org.sakaiproject.profile2.tool.myportfolios.MyPortfolios;">
>>>
>>>         <property name="siteService"  
>>> ref="org.sakaiproject.site.api.SiteService"/>
>>>
>>>     </bean>
>>> In relevant pom.xml , I added :
>>> <dependency>
>>>                     <groupId>org.sakaiproject</groupId>
>>>                     <artifactId>sakai-site-api</artifactId>
>>>                     <scope>provided</scope>
>>>                 </dependency>
>>>
>>> Is this right ?
>>> Thanks ,
>>>
>>>
>>> 2009/11/6 Steve Swinsburg <steve.swinsburg at gmail.com>
>>> Hi,
>>>
>>> Are you making an addition to Profile2 that you might like to  
>>> contribute back? If so, thats great! Could you possibly Jira it  
>>> here:
>>> http://jira.sakaiproject.org/browse/PRFL
>>>
>>> For your issue, it's most likely an API injection issue. You'll  
>>> need to make sure you have the dependency in the relevant POM and  
>>> in the components.xml so Spring can inject it into the beans.  
>>> However if you Jira this task we can go over the goal and  
>>> implementation details.
>>>
>>> cheers,
>>> Steve
>>>
>>>
>>>
>>> On 06/11/2009, at 1:51 AM, Small Cat wrote:
>>>
>>>> Dear all,
>>>> I want to add some functions for Profile2, and one of them can  
>>>> show all scores of assigments in all course sites...
>>>> But I can't use some APIs as getSites.... ( I can use it in other  
>>>> tools, but in Profile2 I don't know why it can't )
>>>> This is error when I deploy :
>>>>
>>>> [ERROR] BUILD FAILURE
>>>> [INFO]  
>>>> ------------------------------------------------------------------------
>>>> [INFO] Compilation failure
>>>>
>>>> C:\sakai\profile2-1.2.1\tool\src\java\org\sakaiproject 
>>>> \profile2\tool\myportfolio
>>>> s\MyPortfolios.java:[22,52] cannot access  
>>>> org.sakaiproject.entity.api.EntityProd
>>>> ucer
>>>> file org\sakaiproject\entity\api\EntityProducer.class not found
>>>>                         courseSiteList = siteService.getSites 
>>>> (SelectionType.ACCE
>>>> SS,
>>>>
>>>> C:\sakai\profile2-1.2.1\tool\src\java\org\sakaiproject 
>>>> \profile2\tool\myportfolio
>>>> s\MyPortfolios.java:[35,60] cannot access  
>>>> org.sakaiproject.entity.api.Edit
>>>> file org\sakaiproject\entity\api\Edit.class not found
>>>>                         courseList.add(courseSiteList.remove 
>>>> (0).getTitle());
>>>>
>>>> How to use getSites in Profile2 , if can not, what methods I can  
>>>> use to replace ?
>>>> Thank you,
>>>> -- 
>>>> Regards,
>>>> Tran Trung Kien
>>>> _______________________________________________
>>>> sakai-dev mailing list
>>>> sakai-dev at collab.sakaiproject.org
>>>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>>>>
>>>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org 
>>>>  with a subject of "unsubscribe"
>>>
>>>
>>>
>>>
>>> -- 
>>> Regards,
>>> Tran Trung Kien
>>
>>
>>
>>
>> -- 
>> Regards,
>> Tran Trung Kien
>> <MyHello.html><MyQuery.java><MyHello.java>
>
>
>
>
> _______________________________________________
> sakai-dev mailing list
> sakai-dev at collab.sakaiproject.org
> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>
> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org 
>  with a subject of "unsubscribe"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20091113/299e4002/attachment.html 


More information about the sakai-dev mailing list