Hi
I have a problem, and I’m upset because of that.
I hope that you will help me.
Ok, I’m creating blueprint. Using javascript and xmlhttp request I send a rest request to my rest controller. In rest controller I call method from services. And here is the problem. I need to have space key there, but I have no idea to do it.
I tried use Conversioncontext, but it always was null. Any ideas? DefaultConversionContext always return null as space key.
Here is my js code:
AJS.toInit(function () {
function fileUpload(e, state) {
var url = Confluence.getContextPath() + "/rest/resources/1.0/files";
var xhr = new XMLHttpRequest();
var formData = new FormData();
xhr.open("POST", url, false);
xhr.setRequestHeader("X-Atlassian-Token", "no-check");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
formData.append("file", document.getElementById("fileupload").files[0]);
xhr.send(formData);
if (xhr.status !== 200) {
var myFlag = AJS.flag({
type: 'error',
title: 'Something went wrong during file uploading',
body: '<p>You have to choose csv file.</p>'
});
}
return xhr.status === 200;
}
function makeCheckboxes(e, state) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", Confluence.getContextPath() + "/rest/resources/1.0/epics", false);
xmlhttp.send();
var json = xmlhttp.responseText;
var obj = JSON.parse(json);
var array = [];
for (var i = 0; i < obj.length; i++) {
array[i] = obj[i].name;
}
var a = document.getElementById("checkbox-container");
var arr = array;
var returnStr = "";
for (i = 0; i < arr.length; i++) {
returnStr += '<div> <input type="checkbox" id="' + arr[i] + '" value="' + arr[i] + '"> <label for="coding">' + arr[i] + '</label> </div>';
}
a.innerHTML = returnStr;
}
function fillDropdownForColumnNames(e, state) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", Confluence.getContextPath() + "/rest/resources/1.0/columns", false);
xmlhttp.send();
var json = xmlhttp.responseText;
var obj = JSON.parse(json);
var epicSelect = document.getElementById("epic-column-name");
var userStorySelect = document.getElementById("user-story-column-name");
for (var i = 0; i < obj.length; i++) {
var opt = obj[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
var el2 = document.createElement("option");
el2.textContent = opt;
el2.value = opt;
userStorySelect.appendChild(el);
epicSelect.appendChild(el2);
}
}
function changeFinalUrl(e, state) {
//state.finalUrl = Confluence.getContextPath();
//return false;
}
function createPages(e, state) {
var url = Confluence.getContextPath() + "/rest/resources/1.0/spaces/pages";
var xhr = new XMLHttpRequest();
xhr.open("POST", url, false);
xhr.setRequestHeader("X-Atlassian-Token", "no-check");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Content-type", "application/json");
xhr.send();
}
Confluence.Blueprint.setWizard('requirement-plugin:template-web-item', function (wizard) {
wizard.on('submit.page1Id', fileUpload);
wizard.on('post-render.page2Id', fillDropdownForColumnNames);
wizard.on('post-render.page3Id', makeCheckboxes);
wizard.on('submit.page3Id', changeFinalUrl);
wizard.on('submit.page3Id', createPages);
});
});
Here is my service:
(sorry for the code - but now I’m testing a lot of way to create pages
import com.atlassian.confluence.content.render.xhtml.ConversionContext;
import com.atlassian.confluence.content.render.xhtml.DefaultConversionContext;
import com.atlassian.confluence.labels.Label;
import com.atlassian.confluence.labels.LabelManager;
import com.atlassian.confluence.pages.Page;
import com.atlassian.confluence.pages.PageManager;
import com.atlassian.confluence.pages.templates.PageTemplateManager;
import com.atlassian.confluence.renderer.PageContext;
import com.atlassian.confluence.spaces.Space;
import com.atlassian.confluence.spaces.SpaceManager;
import com.atlassian.confluence.util.LabelUtil;
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
import com.atlassian.renderer.RenderContext;
import com.atlassian.spring.container.ContainerManager;
import com.soft.pgs.requirements.dto.EpicDTO;
import org.osgi.service.component.annotations.Component;
import java.util.List;
/**
*/
@Scanned
@Component
public class PageServiceImpl implements PageService {
private PageTemplateManager pageTemplateManager = (PageTemplateManager) ContainerManager.getComponent("pageTemplateManager");
private PageManager pageManager = (PageManager) ContainerManager.getComponent("pageManager");
private SpaceManager spaceManager = (SpaceManager) ContainerManager.getComponent("spaceManager");
private LabelManager labelManager = (LabelManager) ContainerManager.getComponent("labelManager");
private RenderContext renderContext = new RenderContext();
private ConversionContext conversionContext = new DefaultConversionContext(renderContext);
//
// public PageServiceImpl(@ComponentImport RenderContext renderContext) {
// this.renderContext = renderContext;
// }
@Override
public void createPagesForChosenEpics(List<EpicDTO> epicDTOs) {
List<Space> allSpaces = spaceManager.getAllSpaces();
pageTemplateManager.getPageTemplates(allSpaces.get(0));
PageContext pageContext = new PageContext();
pageContext.getSpaceKey();
List<Page> pages = pageManager.getPages(allSpaces.get(0), true);
Page parentPage = pages.get(0);
conversionContext.getSpaceKey();
Page page = new Page();
page.setTitle("Próba generalna 243");
page.setParentPage(parentPage);
page.setBodyAsString("<ac:structured-macro ac:name=\"content-report-table\">\n" +
"<ac:parameter ac:name=\"spaces\">\n" +
" <ri:space ri:space-key=\"DOC\"/>\n" +
"</ac:parameter>\n" +
"<ac:parameter ac:name=\"labels\">my-index2</ac:parameter>\n" +
"<ac:parameter ac:name=\"analytics-key\">meeting-notes</ac:parameter>\n" +
"<ac:parameter ac:name=\"maxResults\">5</ac:parameter>\n" +
"</ac:structured-macro>");
page.setVersion(1);
page.setSpace(allSpaces.get(0));
Label label = LabelUtil.addLabel("my-index2", labelManager, page);
parentPage.addChild(page);
pageManager.saveContentEntity(page, null);
}
private void createPageWithContentReportTable(Space space) {
}
private void createChildPage() {
}
}