Hi Nathiesha,

I noticed that there are some more pending tasks to restructure the code
base as per the discussion we had during last code review. Just putting
them down here again, so that you are able to go through again and complete
any missing parts.

*Introduce interfaces for the each sub component  to decouple main
controller logic from implementation specific things*

For example, right now, the controller class (ErrorReporter) is hardly
coupled with EmailSender and RemoteJiraConnector. We can think latter two
as error report publishers and introduce an interface called ErrorPublisher
as below.

public interface ErrorPublisher{
    void publish(ReportGenerator reportGen) throws IOException;
}

And then EmailSender and RemoreJiraConnector classes can be refactored like
below.

public class EmailPublisher implements ErrorPublisher{

     void init () throws IOException{
       //init : read preferences for SMTP connection params
     }

    // implement publish method
    void publish(ReportGenerator reportGen) throws IOException{
        init();
       //send mail
    }
}

public class JiraPublisher implements ErrorPublisher{

     void init () throws IOException{
          //init : read preferences for JIRA resp API connection params
     }

   // implement publish method
   void publish(ReportGenerator reportGen) throws IOException{
       init();
      //post to JIRA api and create issue
   }
}

Finally refactor ErrorReporter class to use only ErrorPublisher interface.
Further more, introduce methods to bind/unbind error publishers.

public class ErrorReporter {
    Map<String, ErrorPublisher> registeredPublishers;

    public void addPublisher (String id, ErrorPublisher publisher){
       registeredPublishers.put(id,publisher);
   }

  public void reportError(){
         //iterate over all publishers
         // and call  publish() method
  }
}

(We can further ErrorReporter class by using OSGI services to let other
devstudio plugins to contribute publishers as needed - we can do that later
as time permits)

For another example, currently you have used a class called ReportGenerator
to generate the report in plain text and directly used that generator
inside main controller. Instead, you can introduce an interface called
ReportGenerator and create a class called TextReportGenerator and move the
code there - and decouple main controller and let other people add report
generators later (say an HTML report generator) as needed. It can be done
in same manner as above example I have provided .

Once you do above restructuring, we can further improve the code to use
OSGI services to decouple these components even further.

Finally, I think it is time for us to convert the project to a maven
project and use tycho maven plugins for building it. I can assist you with
this task - let's discuss this furthermore during the call. The main
requirement here is to make this project directly mergable to developer
studio repository. Since we are now reaching to the final weeks of GSOC
coding period, I think we should concentrate a little more on this task.

Please a suggest a time for the meeting so we are able to discuss
these in-detail.

Thanks,

*Kavith Lokuhewage*
Senior Software Engineer
WSO2 Inc. - http://wso2.com
lean . enterprise . middleware
Mobile - +94779145123
Linkedin <http://www.linkedin.com/pub/kavith-lokuhewage/49/473/419>  Twitter
<https://twitter.com/KavithThiranga>

On Mon, Jul 25, 2016 at 2:11 PM, Kavith Lokuhewage <[email protected]> wrote:

> Hi Nathiesha,
>
> There were some changes done to preference API since Eclipse Mars. I
> suspect that the root cause for the issue should be it. I will go through
> the changes we did in Developer Studio to fix issues with new pref API and
> confirm you whether it is the root cause or not.
>
> Meanwhile, please suggest a time for another meeting this week - probably
> on Thursday or Friday. We will go through the complete implementation to
> verify that everything is in order.
> I went through the code and have some comments too. I will put them in
> github it self.
>
> Thanks,
>
> *Kavith Lokuhewage*
> Senior Software Engineer
> WSO2 Inc. - http://wso2.com
> lean . enterprise . middleware
> Mobile - +94779145123
> Linkedin <http://www.linkedin.com/pub/kavith-lokuhewage/49/473/419>
> Twitter <https://twitter.com/KavithThiranga>
>
> On Wed, Jul 20, 2016 at 10:20 AM, Nathiesha Maddage <
> [email protected]> wrote:
>
>> Hi all,
>>
>> I started unit testing with InfoCollector and Startup Classes, and
>> created a few unit tests using JUnit.
>>
>> Regarding the progress of the project, I am currently working on the
>> ReportArchive module. The ReportArchive module currently displays all the
>> sent error reports to the user in a window, and I am  working on adding a
>> context menu option for each error report to inquire the current status of
>> the issue.
>>
>> Regarding the Preference page, I tried creating a Input Dialog, that
>> would open up for the very first time the plugin  reports an error to the
>> user. This dialog would ask the user to fill  values to compulsory fields
>> like Jira Username and Password, and it would store these values in the
>> preference page as well, for future use.
>>
>> I tried to save the user entered values in Input dialog, to the
>> preference page
>> using Activator.getDefault().getPreferenceStore().setValue() method. This
>> method would set the user entered values in respective fields of the
>> preference page, but that is just temporary. These values disappear from
>> the preference page the next time I run it. Only the default set values by
>> the code and the values that I enter in the preference page there itself
>> would retain permanently. I tried to fix this for a couple of days and
>> tried almost every solution I could find in the internet regarding this.
>>
>> Have you encountered a situation like this where you have to set the
>> values in preference page through code? Any idea whether this is possible
>> and if so how to do it would be of big help!
>>
>> Best regards
>>
>> Nathiesha
>>
>>
>> On Thu, Jul 7, 2016 at 6:31 AM, Nathiesha Maddage <
>> [email protected]> wrote:
>>
>>> Hi all,
>>>
>>> Regarding the current status of the project, I am working on the
>>> development of the report Archive module, where the user can view the
>>> previously sent error reports and also the current status of those issues.
>>> Meanwhile I thought to look into the testing part of the project as well.
>>> Is their any special testing framework used in Developer Studio testing,
>>> that I need to adopt? I though to use JUnit. Is it OK?
>>>
>>> Regards
>>>
>>> Nathiesha
>>>
>>> On Tue, Jun 28, 2016 at 9:34 AM, Nathiesha Maddage <
>>> [email protected]> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I downloaded and tried running the Data Analytics Server . Currently I
>>>> am going through the DAS documentation and the REST API. Is it possible to
>>>> post data using the REST API? As I noticed, it only allows to retrieve data
>>>> from the DAS.
>>>>
>>>> Thanks and regards
>>>>
>>>> Nathiesha
>>>>
>>>
>>>
>>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to