It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

How to dynamically show and hide web-panel depending on particular condition

Sachin Dhamale Jan 13, 2014

I have a web panel on issue page that web panel should be display for a particular project (not for all project) which are store in my AO table.

The projet which are present in AO table for that project only i have to show web panel otherwise it will be hide

15 answers

2 votes
Sachin Dhamale Jan 29, 2014

This is xml file :

<web-panel name="WorkBreakdownStructure" i18n-name-key="work-breakdown-structure.name" key="work-breakdown-structure" location="atl.jira.view.issue.left.context" weight="100">
    <description key="work-breakdown-structure.description">The WorkBreakdownStructure Plugin</description>
    <label key="work-breakdown-structure.title"/>
    <context-provider class="com.jira.example.web.contextproviders.WBSContextProvider"/>
    <resource name="view" type="velocity" location="templates/webpanels/wbs-indicator.vm"/>
   <condition class="com.jira.example.condition.wbsConfiguration" invert="true" />
  </web-panel>

wbsConfiguration is class file

public class wbsConfiguration extends AbstractIssueCondition {

	private static  ApplicationProperties ap;
	private final ActiveObjects ao;
	WbsGenerator wbsGenerator;
	public wbsConfiguration(ActiveObjects ao, ApplicationProperties ap2)
	{
		this.ao=ao;
	    this.ap=ap2;
	    wbsGenerator = new WbsGenerator(ao,ap2);
	}

	@Override
	public boolean shouldDisplay(User arg0, Issue arg1, JiraHelper arg2) {
		
		boolean flag=false;
		//here u write u r logic for whic project u want to show web panel
		if(res.equals("Y"))
		{
			flag = false;
		}
		else
		{
			flag = true;
		}
		return flag;
	}

}

if flag is false then panel get display

we can also refere cookbook in that search webpanel condition

Jayashree Shetty Jan 29, 2014

Thanks Sachin.I too did the same way. But its like i am hardcoding the project name like this


if

(projKey == "nn")

return true;

else

return false;

How can i get rid of this?Its like to whichever project i dont want the web-panel to get displayed i need to check in this class file. Is there a way by which we can avoid this hardcoding.

1 vote
Sachin Dhamale Jan 30, 2014

Go to this link : "https://developer.atlassian.com/display/DOCS/Getting+Started+with+Active+Objects"

here you get how to create AO table information please like the answer if it helpful for you

Jayashree Shetty Feb 02, 2014

Thank you Sachin . Do we need to get AO installed or does it come part of the JIRA's higher version. Because i read that Active Objects shouldnt be installed in production environment?

1 vote
Sachin Dhamale Feb 04, 2014

1.First u have to store projectName in AO table

if its dine then from condition class u have to retrive that data

and check wheather current project is present in that or not

refer jira development cookbook for store , delete and access data from AO table

1 vote
Sachin Dhamale Mar 20, 2014

You have to make module for this called webwork

so it will create section in administartion part

in that section you can make GUI and write buisness logic

just search how to create administraion section on net

Jayashree Shetty Mar 20, 2014

Something similar to this?

http://www.j-tricks.com/1/post/2012/10/use-of-decorators-on-jira-pages.html

So on a higher level view what i understood is in your atlassian.xml gadget of your gadget you have added another module "webwork". You make the required GUI for it and wrote your business logic to load the projects into it. The logic of this says is written in a logic.java file. This been referred to the context-provider section of your webpanel?

Have in understood correctly? How are you listing out the projects in your GUI? If you dont mind can you post your implementation. I tried using a rest service but its not working.

Ravi Singh Apr 05, 2016

how to get due date on dashboard? not on project page or issue page

 

1 vote
Sachin Dhamale Mar 20, 2014

use this for grtting all project in jira

ProjectManager myProjectManager = new ProjectManager()

public List<Project> getAllProjects() {
return myProjectManager.getProjectObjects();
}

ProjectManager is object you have to inject it constructer

this will return list of project

in vm file you have to call methos and iterate it

#foreach($p in $action.getAllProjects())
<option value="$p.name">$p.name</option>
#end`

0 votes
Naren Jan 13, 2014

Have you tried adding the condition to your web-panel. Read here.

Sachin Dhamale Jan 13, 2014

Yes but it check for jiras inbuilt condition

i want to check by programmatically

0 votes
Sachin Dhamale Jan 14, 2014

<condition class="com.jira.example.condition.wbsConfiguration" invert="true" />

create one class called wbsConfiguration and extend AbstractIssueCondition class

but AbstractIssueCondition is deprecated method is there any method for this

Jayashree Shetty Jan 28, 2014

Hi Sachin. I too have the same requirement where i want my web-panel to get displayed for particular project and not all. I checked the web-panel package from here. But i didnt find any suitable condition to add in the atlassian-plugin.xml page. Did youget this resolved?

0 votes
Sachin Dhamale Jan 28, 2014

<condition class="com.jira.example.condition.wbsConfiguration" invert="true" />

use this in .xml file in your

wbsConfiguration is a class in that you have to right u r logic

if condition is true the return flase

if condition false then panel get display otherwise it hide

Jayashree Shetty Jan 29, 2014

Thanks Sachin, Can you share your code for understanding

as well as the condition part of xml file

0 votes
Sachin Dhamale Jan 29, 2014

my question is how u decide for which project you want webpanel.

if you have separate GUI for this then

you can store the project key in AO table for which you want to display webpanel from that GUI

and then check whether selected project key present in AO table or not if not then hide web panel.

so it will be dyanamic

Jayashree Shetty Jan 29, 2014

Thanks Sachin. Since i have recently started coding in JIRA i dont have ideahow to create an AO Table. Do you have any links/tutorial which explains this.

Jayashree Shetty Feb 02, 2014

Need some help here.

Step 1: I have a plugin created, which is appearing on the jira issue view page

Step 2: Added these dependancies in the pom.xml file

<dependency>
<groupId>com.atlassian.activeobjects</groupId>
<artifactId>activeobjects-plugin</artifactId>
<version>0.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.atlassian.sal</groupId>
<artifactId>sal-api</artifactId>
<version>2.4.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>

and

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-refapp-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<pluginArtifacts>
<pluginArtifact>
<groupId>com.atlassian.activeobjects</groupId>
<artifactId>activeobjects-plugin</artifactId>
<version>${ao.version}</version>
</pluginArtifact>
<pluginArtifact>
<groupId>com.atlassian.activeobjects</groupId>
<artifactId>activeobjects-refapp-spi</artifactId>
<version>${ao.version}</version>
</pluginArtifact>
</pluginArtifacts>
<productVersion>${refapp.version}</productVersion>
</configuration>
</plugin>

step 3: added this in atlassian.xml

<ao key="ao-module">
<description>The configuration of the Active Objects service</description>
<entity>com.example.plugins.entity.ProjectEntity</entity>
</ao>

<component-import key="ao" name="Active Objects components" interface="com.atlassian.activeobjects.external.ActiveObjects">
<description>Access to the Active Objects service</description>
</component-import>

step 4: created a package and added an interface named ProjectEntity

package com.example.plugins.entity;
import net.java.ao.Entity;

public interface ProjectEntity extends Entity
{
public String getProjectName();
public void SetProjectName(String Name);
}

Jayashree Shetty Feb 03, 2014

step5: Added a class named AOClass

when i import this

<font></font>

import

<font></font> com.atlassian.activeobjects.external.ActiveObjects;

i get namespace not resolved.

i am stuck here, how can i proceed further

0 votes
Sachin Dhamale Feb 03, 2014
import net.java.ao.Entity;
import net.java.ao.Preload;

@Preload
public interface name extends Entity{

    String getColumnData();
    void setColumnData(String columnData);   
   
}

write entity file like this

Jayashree Shetty Feb 04, 2014

Thanks did that. But why is Preload required?

Jayashree Shetty Feb 04, 2014

Thanks did that. But why is Preload required? Seems like the resolve error of active object namespace resolved too by doing atlas clean

0 votes
Jayashree Shetty Feb 04, 2014

This is my atlassian-plugin.xml

<component-import key="applicationProperties" interface="com.atlassian.sal.api.ApplicationProperties"/>

<web-panel name="DueDateIndicator" i18n-name-key="due-date-indicator.name" key="due-date-indicator"

location="atl.jira.view.issue.right.context" weight="1000">

<description key="due-date-indicator.description">The DueDateIndicator Plugin</description>

<context-provider class="com.example.plugins.tutorial.DueDateIndicator"/>

<resource name="view" type="velocity" location="due-date-indicator.vm"/>

<condition class="com.example.plugins.entity.Enabledprojects"></condition>

<label key="due-date-indicator.title"/>

</web-panel>

My webpanel is DueDateIndicator

I have created a project entity class to get and set the project list as follows

package com.example.plugins.entity;

import net.java.ao.Entity;

import net.java.ao.Preload;

@Preload

public interface ProjectEntity extends Entity

{

public String getProjectName();

public void SetProjectName(String Name);

}

My condition class is Enabledprojects

package com.example.plugins.entity;
import com.atlassian.activeobjects.external.ActiveObjects;
public class Enabledprojects
{
private final ActiveObjects ao;
public Enabledprojects(ActiveObjects ao)
{
this.ao = ao;
}
}
Now how do i proceed to get the list of projects which i have created in JIRA and how can i store this in active objects
0 votes
Jayashree Shetty Feb 04, 2014

I did refer the cookbook howeveer have some doubts. Can you share how have you stored the projectnames in AO table? Do you do this in Entity interface?

What i have done is i have an entity class "ProjectEntity " and i have getter and setter for ProjectName and ProjectId.

Now i have a class called "Enabledprojects". According to the book what i understood is that we need to add all the projects to the project entity and use the activeobject to get the projects. In case if i have some 40 projects then i need to add one by one to this list?? is there any other way to do this? Can i have all the project list stored in one xml file and load the data from this xml file?

0 votes
sachin dhamale Feb 04, 2014

For example, we need to store the name, city and country as part of the address
entity. In this case, the AddressEntity interface will look like the following:
public interface AddressEntity extends Entity{
public String getName();
public void setName(String name);
public String getState();
public void setState(String state);
public String getCountry();
public void setCountry(String country);
}

By doing this, we have setup the entity to facilitate the storage of all the three attributes.
We can now create, modify, or delete the data using the ActiveObjects component.
The component can be instantiated by injecting it into the constructor.


private ActiveObjects ao;
public ManageProperties(ActiveObjects ao) {
this.ao = ao;
}


A new row can be added to the database using the following piece of code:


AddressEntity addressEntity = ao.create(AddressEntity.class);
addressEntity.setName(name);
addressEntity.setState(state);
addressEntity.setCountry(country);
addressEntity.save();


Details can be read either using the id, which is the primary key, or by querying the data
using a net.java.ao.Query object. Using ID is as simple as is shown next:


AddressEntity addressEntity = ao.get(AddressEntity.class, id);

The Query object can be used as follows:
AddressEntity[] addressEntities = ao.find(AddressEntity.class, Query.
select().where("name = ?", name));
for (AddressEntity addressEntity : addressEntities) {
System.out.println("Name:"+addressEntity.getName()+",
State:"+addressEntity.getState()+", Country:"+addressEntity.
getCountry());
}
Here, we are querying for all records with a given name.
Once you get hold of an entity by either means, we can edit the contents simply by using the
setter method:
addressEntity.setState(newState);
addressEntity.save();
Deleting is even simpler!
ao.delete(addressEntity);
Hopefully, that gives a fair introduction to active objects.

Jayashree Shetty Feb 05, 2014

thanks i did read this from cookbook as suggested by you. I just have a small doubt. If we use the internal db HSQL which would contain the list of projects in it then i guess we need to use only the select query to retrieve all the projects rgt?we need not use create/delete when its just retreiving records. Am i right?

0 votes
sachin dhamale Feb 05, 2014

yes i just give you that for feature use

Jayashree Shetty Mar 18, 2014

Hi Sachin.

Could you please share your code for the hiding and displaying of web-panel. I was doing some other dev so cudnt try this. But now i need to implement this and somethings are not working. Can you please share you code for this so that i can relate to what i am doing. I am still not clear about implementing the active objects.

Did you create a separate GUI for your project lists? Could you explain your code.

thanks

0 votes
Sachin Dhamale Mar 19, 2014

just refer my first answer

in that u have to make change in xml file add this in web panel

<condition class="com.jira.example.condition.wbsConfiguration" invert="true" />

create wbsConfiguration class in that write u r buissness ligic

for project list i have create seperate GUI with that user can select project

Jayashree Shetty Mar 20, 2014

This GUI is another gadget i suppose? Is this configured in dashboard? How do these gadgets talk with each other?

I mean i thought that the GUI you are talking about is another gdaget which is added to a dashboard and the user can select the projects which will generate an o/p of xml file with selected project lists and this would be then fed as an input to the gadget in issue view page. Then we have a condition to check if the current project is among the list of selected projects, if yes then display the gadget which is in the issue view page else hide it.

How have you implemented this ?

Suggest an answer

Log in or Sign up to answer
This widget could not be displayed.
This widget could not be displayed.
Community showcase
Published in Jira

Here’s what we’re doing to make Jira Cloud faster

Hello Community 🤗 I’m Nikhil, a Product Manager on the Jira Cloud team working on performance improvements. Performance is an ongoing journey and we continue to invest heavily in it. We under...

139 views 1 19
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you