text:
package org.xmlcml.cmine.files;

import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.xmlcml.cmine.CMineFixtures;
import org.xmlcml.cmine.args.DefaultArgProcessor;
import org.xmlcml.cmine.util.CMineTestFixtures;
import org.xmlcml.html.HtmlElement;

import nu.xom.Element;

public class CProjectTest {

	private static final Logger LOG = Logger.getLogger(CProjectTest.class);
	private static File ZIKA_DIR = new File(CMineFixtures.TEST_RESULTS_DIR, "zika");

	static {
		LOG.setLevel(Level.DEBUG);
	}

	@Test
	public void testCProject() {
		File project1Dir = new File(CMineFixtures.TEST_PROJECTS_DIR, "project1");
		Assert.assertTrue(project1Dir.exists());
		CContainer cProject = new CProject(project1Dir);
		File projectDir = cProject.getDirectory();
		Assert.assertTrue(projectDir.exists());
	}

	@Test
	public void testCProjectManifest() {
		CContainer cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project1"));
		CProjectManifest manifest = (CProjectManifest) cProject.getOrCreateManifest();
		Assert.assertNotNull(manifest);
		File manifestFile = manifest.getOrCreateManifestFile();
		Element manifestElement = manifest.getOrCreateManifestElement();
		Assert.assertNotNull("need manifest file in "+cProject.getDirectory(), manifestFile);
	}

	@Test
	public void testManifestDocs() {
		CContainer cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project1"));
		CProjectManifest manifest = (CProjectManifest) cProject.getOrCreateManifest();
		HtmlElement docElement = manifest.getDocHtml();
		LOG.trace(docElement);
	}

	@Test
	public void testUpdateManifest() {
		CContainer cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project1"));
		cProject.updateManifest();
	}

	@Test
	public void testGetCTreeList() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project1"));
		List<File> allChildDirectoryList = cProject.getAllChildDirectoryList();
		Assert.assertEquals("all child dir", 2, allChildDirectoryList.size());
		List<File> allChildFileList = cProject.getAllChildFileList();
		Assert.assertEquals("all child file", 1, allChildFileList.size());
		CTreeList cTreeList = cProject.getCTreeList();
		Assert.assertEquals("trees", 2, cTreeList.size());
	}

	@Test
	/** this is a small set downloaded from EPMC
	 *
	 */
	public void testCTreeContent2() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project2"));
		List<File> allChildDirectoryList = cProject.getAllChildDirectoryList();
		Assert.assertEquals("all child dir", 3, allChildDirectoryList.size());
		List<File> allowedChildDirectoryList = cProject.getAllowedChildDirectoryList();
		// this is zero because the CTrees are not counted as allowedDirectories
		Assert.assertEquals("allowed child dir", 0, allowedChildDirectoryList.size());
		List<File> unknownChildDirectoryList = cProject.getUnknownChildDirectoryList();
		Assert.assertEquals("unknown child dir", 0, unknownChildDirectoryList.size());
		CTreeList cTreeList = cProject.getCTreeList();
		Assert.assertEquals("all child dir", 3, cTreeList.size());

		List<File> allChildFileList = cProject.getAllChildFileList();
		Assert.assertEquals("all child file", 2, allChildFileList.size());
		List<File> allowedChildFileList = cProject.getAllowedChildFileList();
		Assert.assertEquals("allowed child file", 2, allowedChildFileList.size());
		List<File> unknownChildFileList = cProject.getUnknownChildFileList();
		Assert.assertEquals("unknown child file", 0, unknownChildFileList.size());

		CTree cTree1 = cTreeList.get(0);
		cTree1.getOrCreateFilesDirectoryCTreeLists();

	}

	@Test
	/** this is an irregular structure to test the system.
	 *
	 */
	@Ignore // fails with some people
	public void testCTreeContent3() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project3"));
		List<File> allChildDirectoryList = cProject.getAllChildDirectoryList();
		Assert.assertEquals("all child dir", 3, allChildDirectoryList.size());
		List<File> allowedChildDirectoryList = cProject.getAllowedChildDirectoryList();
		// this is zero because the CTrees are not counted as allowedDirectories
		Assert.assertEquals("allowed child dir", 0, allowedChildDirectoryList.size());
		List<File> unknownChildDirectoryList = cProject.getUnknownChildDirectoryList();
		Assert.assertEquals("unknown child dir", 1, unknownChildDirectoryList.size());
		CTreeList cTreeList = cProject.getCTreeList();
		Assert.assertEquals("all child dir", 2, cTreeList.size());

		List<File> allChildFileList = cProject.getAllChildFileList();
		Assert.assertEquals("all child file", 3, allChildFileList.size());
		List<File> allowedChildFileList = cProject.getAllowedChildFileList();
		Assert.assertEquals("allowed child file", 2, allowedChildFileList.size());
		List<File> unknownChildFileList = cProject.getUnknownChildFileList();
		Assert.assertEquals("unknown child file", 1, unknownChildFileList.size());

		// cTree1 is a normal CTree
		CTree cTree1 = cTreeList.get(0);
		allowedChildDirectoryList = cTree1.getAllowedChildDirectoryList();
		Assert.assertEquals("allowed child dir", 1, allowedChildDirectoryList.size());
		unknownChildDirectoryList = cTree1.getUnknownChildDirectoryList();
		Assert.assertEquals("unknown child dir", 0, unknownChildDirectoryList.size());

		allChildFileList = cTree1.getAllChildFileList();
		Assert.assertEquals("all child file", 2, allChildFileList.size());
		allowedChildFileList = cTree1.getAllowedChildFileList();
		Assert.assertEquals("allowed child file", 2, allowedChildFileList.size());
		unknownChildFileList = cTree1.getUnknownChildFileList();
		Assert.assertEquals("unknown child file", 0, unknownChildFileList.size());

		// cTree2 is a normal CTree, without results/
		CTree cTree2 = cTreeList.get(0);
		allowedChildDirectoryList = cTree2.getAllowedChildDirectoryList();
		Assert.assertEquals("allowed child dir", 1, allowedChildDirectoryList.size());
		unknownChildDirectoryList = cTree2.getUnknownChildDirectoryList();
		Assert.assertEquals("unknown child dir", 0, unknownChildDirectoryList.size());

		allChildFileList = cTree2.getAllChildFileList();
		Assert.assertEquals("all child file", 2, allChildFileList.size());
		allowedChildFileList = cTree2.getAllowedChildFileList();
		Assert.assertEquals("allowed child file", 2, allowedChildFileList.size());
		unknownChildFileList = cTree2.getUnknownChildFileList();
		Assert.assertEquals("unknown child file", 0, unknownChildFileList.size());

		// there are only 2 CTrees as the nonctree/ has no reserved filenames

	}

	@Test
	@Ignore // sorting problem
	public void testRelativeProjectPath() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project3"));
		String relativePath = cProject.getRelativeProjectPath(cProject.getResultsXMLFileList().get(0));
		Assert.assertEquals("relpath", "ctree1/results/sequence/dnaprimer/results.xml", relativePath);
	}

	@Test
	public void testResultsXML() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project3"));
		List<File> resultsXMLFileList = cProject.getResultsXMLFileList();
		Assert.assertEquals("all results.xml", 2, resultsXMLFileList.size());
		cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "regex10"));
		List<File> resultsXMLFiles = cProject.getResultsXMLFileList();
		Assert.assertEquals("all results.xml", 10, resultsXMLFiles.size());
		Assert.assertEquals("all results.xml", 9, cProject.getResultsXMLFileList(CProject.OMIT_EMPTY).size());
//		List<String> relativePaths = cProject.getRelativeProjectPaths(resultsXMLFiles);
		/** possible unpredictable order
		Assert.assertEquals("relative paths",
				"["
				+ "e0115544/results/regex/consort0/results.xml,"
				+ " e0116215/results/regex/consort0/results.xml,"
				+ " e0116596/results/regex/consort0/results.xml,"
				+ " e0116903/results/regex/consort0/results.xml,"
				+ " e0117956/results/regex/consort0/results.xml,"
				+ " e0118659/results/regex/consort0/results.xml,"
				+ " e0118685/results/regex/consort0/results.xml,"
				+ " e0118692/results/regex/consort0/results.xml,"
				+ " e0118792/results/regex/consort0/results.xml,"
				+ " e0119090/results/regex/consort0/results.xml"
				+ "]",
				relativePaths.toString());
				*/
	}

	@Test
	public void testUnzip() {

	}

	@Test
	@Ignore
	public void testGlobFileListHuge() {
		File patentFile = new File("../patents");
		if (!patentFile.exists()) return; // only for PMR
		CProject cProject = new CProject(new File(patentFile, "US08979"));
		ProjectFilesTree projectFilesTree = cProject.extractProjectFilesTree("**/*");
		Assert.assertEquals(995,  projectFilesTree.size());
		Assert.assertEquals(13,  projectFilesTree.get(0).size());
	}

	@Test
	@Ignore
	public void testGlobFileListMedium() throws IOException {
		File targetDir = new File("target/patents/US08979");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_MISC_DIR, "patents/US08979"), targetDir);
		String args = "-i scholarly.html --project "+targetDir;
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
		CProject cProject = argProcessor.getCProject();
		ProjectFilesTree treeFilesList = cProject.extractProjectFilesTree("**/*");
		Assert.assertEquals(71,  treeFilesList.size());
		CTreeFiles treeFiles0 = treeFilesList.get(0);
		Assert.assertTrue(treeFiles0.size() > 11 && treeFiles0.size() < 14);
//		Assert.assertEquals(13,  treeFiles0.size());
		treeFiles0.sort();
		/** sort instability
		Assert.assertEquals("treeFiles",  ""
				+"<cTreeFiles cTree=\"target/patents/US08979/US08979000-20150317\">"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/fulltext.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/gene/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/consort0/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/plasmid/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/synbioPhrases/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/species/binomial/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/species/genus/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/word/frequencies/results.html\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/word/frequencies/results.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/scholarly.html\" />"
				+ "</cTreeFiles>",
				treeFiles0.toString()
				);
				*/
	}

	@Test
	@Ignore
	public void testGlobFileListMedium1() throws IOException {
		File targetDir = new File("target/patents/US08979");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_MISC_DIR, "patents/US08979"), targetDir);
		String args = "--filter file(**/fulltext.xml)xpath(//description[heading[.='BACKGROUND']]/p[contains(.,'polymer')]) --project "+targetDir+" -o background.xml";
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
	}

	@Test
	public void testGlobFileListSmallCommand() throws IOException {
		File targetDir = new File("target/patents/US08979small");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_MISC_DIR, "patents/US08979small"), targetDir);
		String args = "-i scholarly.html --filter file(**/*) --project "+targetDir+" --output cTreeList.xml";
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
		CProject cProject = argProcessor.getCProject();
		ProjectFilesTree treeFilesList = cProject.extractProjectFilesTree("**/{empty,results,fulltext,scholarly}.{xml,html}");

		Assert.assertEquals(5,  treeFilesList.size());
		CTreeFiles treeFiles0 = treeFilesList.get(0);
		Assert.assertTrue("xmlfiles", treeFiles0.size() >= 13 && treeFiles0.size() <= 14);
		treeFiles0.sort();
		/**
		Assert.assertEquals("treeFiles",
				"<cTreeFiles cTree=\"target/patents/US08979small/US08979000-20150317\">"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/fulltext.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/gene/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/regex/consort0/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/regex/plasmid/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/regex/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/search/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/search/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/search/synbioPhrases/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/species/binomial/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/species/genus/empty.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/word/frequencies/results.html\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/results/word/frequencies/results.xml\" />"
				+ "<file name=\"target/patents/US08979small/US08979000-20150317/scholarly.html\" /></cTreeFiles>",
				treeFiles0.toString()
				);
				*/
	}

	@Test
	public void testGlobFileXPathSmallCommand() throws IOException {
		File targetDir = new File("target/patents/US08979small");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_MISC_DIR, "patents/US08979small"), targetDir);
		String args = "--filter file(**/fulltext.xml)xpath(//country) --project "+targetDir+" --output country.xml";
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
		File outputFile = new File(targetDir, "country.xml");
		Assert.assertTrue("output file", outputFile.exists());
		CProject cProject = argProcessor.getCProject();
		ProjectFilesTree projectFilesTree = cProject.getProjectFilesTree();
		Assert.assertEquals("trees",  5, projectFilesTree.size());
		CTreeFiles treeFiles0 = projectFilesTree.get(0);
//		LOG.debug(treeFiles0);
		/**
		Assert.assertEquals("treefiles0",
		"<cTreeFiles cTree=\"target/patents/US08979small/US08979000-20150317\"><file name=\"target/patents/US08979small/US08979000-20150317/fulltext.xml\" /></cTreeFiles>",
		treeFiles0.toString()
		);
		*/

	}

	@Test
	@Ignore
	public void testGlobFileListMediumCommand() throws IOException {
		File targetDir = new File("target/patents/US08979");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_MISC_DIR, "patents/US08979"), targetDir);
		String args = "--filter file(**/*) --project "+targetDir;
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
		CProject cProject = argProcessor.getCProject();
		ProjectFilesTree treeFilesList = cProject.extractProjectFilesTree("**/*");
		Assert.assertEquals(71,  treeFilesList.size());
		CTreeFiles treeFiles0 = treeFilesList.get(0);
//		Assert.assertEquals(13,  treeFiles0.size());
		Assert.assertTrue(treeFiles0.size() > 11 && treeFiles0.size() < 14);
		treeFiles0.sort();
		/** unstable wrt sort
		Assert.assertEquals("treeFiles",  ""
				+"<cTreeFiles cTree=\"target/patents/US08979/US08979000-20150317\">"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/fulltext.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/gene/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/consort0/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/plasmid/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/regex/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/hgnc/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/synbio/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/search/synbioPhrases/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/species/binomial/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/species/genus/empty.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/word/frequencies/results.html\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/results/word/frequencies/results.xml\" />"
				+ "<file name=\"target/patents/US08979/US08979000-20150317/scholarly.html\" />"
				+ "</cTreeFiles>",
				treeFiles0.toString()
				);
				*/
	}

	@Test
	@Ignore
	public void testGlobFileListHugeResults() {
		File patentFile = new File("../patents");
		if (!patentFile.exists()) return; // only for PMR
		CProject cProject = new CProject(new File(patentFile, "US08979"));
		ProjectFilesTree fileListList = cProject.extractProjectFilesTree("**/results.xml");
		Assert.assertEquals(995,  fileListList.size());
		Assert.assertEquals(1,  fileListList.get(0).size());
		Assert.assertEquals("../patents/US08979/US08979000-20150317/results/word/frequencies/results.xml",
				fileListList.get(0).get(0).toString());
	}

	/** files for project2 are:
	 * /Users/pm286/workspace/cmine/src/test/resources/org/xmlcml/files/projects
	 *
$ tree project2
project2
├── PMC4417228
│   ├── fulltext.pdf
│   └── fulltext.xml
├── PMC4521097
│   ├── fulltext.pdf
│   └── fulltext.xml
├── PMC4632522
│   ├── fulltext.pdf
│   └── fulltext.xml
├── eupmc_results.json
└── log.xml

	 *
	 */
	@Test
	public void testGlobFileList() {
		CProject cProject = new CProject(new File(CMineFixtures.TEST_PROJECTS_DIR, "project2"));
		ProjectFilesTree projectFilesTree = cProject.extractProjectFilesTree("**/*");
		// 3 CTrees of form PMCddddddd
		Assert.assertEquals("a", 3,  projectFilesTree.size());
		// the first one has two child files (fulltext.pdf and fulltext.xml)
		CTreeFiles cTreeFiles = projectFilesTree.get(0);
		Assert.assertNotNull("files", cTreeFiles);
		Assert.assertEquals("b", 2,  cTreeFiles.size());
		// fails on unsorted lists

//		Assert.assertEquals("c", "src/test/resources/org/xmlcml/files/projects/project2/PMC4417228/fulltext.pdf",
//				fileListList.get(0).get(0).toString());
//		Assert.assertEquals("d", "src/test/resources/org/xmlcml/files/projects/project2/PMC4417228/fulltext.xml",
//				fileListList.get(0).get(1).toString());
	}

	@Test
	@Ignore
	public void testGlobFileListAndXPathSearch() throws IOException {
		File targetDir = new File("target/glob/project2/ctree1");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_PROJECTS_DIR, "project2/"), targetDir);
		CProject cProject = new CProject(targetDir);
		PluginSnippetsTree pluginSnippetsTree = cProject.extractPluginSnippetsTree("**/fulltext.xml", "//title[starts-with(.,'Data')]");
		/**
<pluginSnippetsTree>
  <snippetsTree>
    <snippets file="target/glob/project2/ctree1/PMC4417228/fulltext.xml">
	  <title>Data collection</title>
	  <title>Data analysis</title>
	</snippets>
  </snippetsTree>
  <snippetsTree>
    <snippets file="target/glob/project2/ctree1/PMC4632522/fulltext.xml">
	  <title>Data accessibility</title>
	</snippets>
  </snippetsTree>
</pluginSnippetsTree>
*/
		Assert.assertEquals("snippetsTrees", 2, pluginSnippetsTree.size());
		// needs sorted output
//		SnippetsTree snippetsTree0 = pluginSnippetsTree.get(0);
//		Assert.assertEquals("snippet", 1, snippetsTree0.size());
//		XMLSnippets snippets0 = snippetsTree0.get(0);

//		Assert.assertEquals("snippets0", ""
//				+ "<snippets file=\"target/glob/project2/ctree1/PMC4417228/fulltext.xml\">"
//				+ "<title>Data collection</title><title>Data analysis</title>"
//				+ "</snippets>",
//				snippets0.toXML());
	}

	@Test
	/**
	 * SHOWCASE
	 *
	 */
	public void testGlobFileListAndXPathSearchCommand() throws IOException {
		File targetDir = new File("target/glob/project2/ctree1");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_PROJECTS_DIR, "project2/"), targetDir);
		String output = "snippets.xml";
		String filterExpression = "file(**/fulltext.xml)xpath(//title[starts-with(.,'Data')])";
		String args = " --project " + targetDir+" --filter " + filterExpression + " -o "+output;
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();

		PluginSnippetsTree pluginSnippetsTree = argProcessor.getPluginSnippetsTree(filterExpression);
		Assert.assertNotNull("pluginSnippetsTree not null", pluginSnippetsTree);
		Assert.assertEquals("snippetsTrees", 2, pluginSnippetsTree.size());
		/**
		Assert.assertEquals("snippets",
		"<pluginSnippetsTree>"
		+ "<snippetsTree>"
		+   "<snippets file=\"target/glob/project2/ctree1/PMC4417228/fulltext.xml\">"
		+     "<title>Data collection</title>"
		+     "<title>Data analysis</title>"
		+   "</snippets>"
		+  "</snippetsTree>"
		+  "<snippetsTree>"
		+    "<snippets file=\"target/glob/project2/ctree1/PMC4632522/fulltext.xml\">"
		+      "<title>Data accessibility</title>"
		+    "</snippets>"
		+  "</snippetsTree>"
		+ "</pluginSnippetsTree>",
		pluginSnippetsTree.toString()
		);
		*/

		// this is not wriiten, because projectsFile takes precedence
		ProjectFilesTree projectFilesTree = argProcessor.getProjectFilesTree();
		Assert.assertEquals("filesTrees", 2, projectFilesTree.size());
		/**
		Assert.assertEquals("files",
			"<cTreeFilesTree project=\"target/glob/project2/ctree1\">"
			+ "<cTreeFiles cTree=\"target/glob/project2/ctree1/PMC4417228\">"
			+   "<file name=\"target/glob/project2/ctree1/PMC4417228/fulltext.xml\" />"
			+  "</cTreeFiles>"
			+  "<cTreeFiles cTree=\"target/glob/project2/ctree1/PMC4632522\">"
			+    "<file name=\"target/glob/project2/ctree1/PMC4632522/fulltext.xml\" />"
			+  "</cTreeFiles>"
			+ "</cTreeFilesTree>",
			projectFilesTree.toString()
			);
			*/
	}

	@Test
	public void testGlobFileListAndXPathSearchCommandResults() throws IOException {
		File targetDir = new File("target/glob/project2/ctree1");
		CMineTestFixtures.cleanAndCopyDir(new File(CMineFixtures.TEST_PROJECTS_DIR, "project2/"), targetDir);
		String output = "snippets.xml";
		String args = " --project " + targetDir+" --filter file(**/results.xml)xpath(//result) -o "+output;
		DefaultArgProcessor argProcessor = new DefaultArgProcessor();
		argProcessor.parseArgs(args);
		argProcessor.runAndOutput();
		Assert.assertEquals("trees", 3,  argProcessor.getCTreeList().size());
//		for (CTree cTree : argProcessor.getCTreeList()) {
//			SnippetsTree snippetsTree = cTree.getSnippetsTree();
//			LOG.debug("SNIPz "+snippetsTree);
//		}
	}

	//==================================

//	@Test
//	public void testFilenameSet() throws IOException {
//		Set<String> filenameSet = new HashSet<String>();
//		filenameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SEQUENCE_DNAPRIMER_SNIPPETS_XML).getOrCreateFilenameList());
//		filenameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.GENE_HUMAN_SNIPPETS_XML).getOrCreateFilenameList());
//		filenameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SPECIES_BINOMIAL_SNIPPETS_XML).getOrCreateFilenameList());
//		filenameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SPECIES_GENUS_SNIPPETS_XML).getOrCreateFilenameList());
//		Assert.assertEquals("all files", 152, filenameSet.size());
//	}
//
//	@Test
//	public void testProjectNameSet() throws IOException {
//		Set<String> projectNameSet = new HashSet<String>();
//		projectNameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SEQUENCE_DNAPRIMER_SNIPPETS_XML).getCTreeNameList());
//		projectNameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.GENE_HUMAN_SNIPPETS_XML).getCTreeNameList());
//		projectNameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SPECIES_BINOMIAL_SNIPPETS_XML).getCTreeNameList());
//		projectNameSet.addAll(CMineTestFixtures.createPluginSnippetsTree(ZIKA_DIR, CProject.SPECIES_GENUS_SNIPPETS_XML).getCTreeNameList());
//		Assert.assertEquals("all files", 90, projectNameSet.size());
//	}

}

redpajama_set_name: RedPajamaGithub


"I am a hotelier. I understand the difficulty of doing business. As Minister for Industry, I will make sure that no industry will face any hardship to set up shop here." - Gajendra Singh Khimsar, Minister for Industry, Youth Affairs and NRI, Government of Rajasthan.
Situated strategically close to the National Capital Region (NCR), Rajasthan is a gateway to the north and west. A power surplus state, Rajasthan has 15,000 MW of power generation capacity of which 3400 MW is from renewable energy. The state plans to add another 6500 MW in five years.
Rajasthan has been traditionally strong in minerals, textiles, tourism and gem and jewellery. The focus sectors for this summit are agro and food processing, auto and engineering, electronics and hardware, renewable energy, IT/ ITES, healthcare, MSME, defence manufacturing and infrastructure.
With the proximity to NCR, the state is emerging as a strong player in automotive engineering. Bhiwadi, Neemrana and Pathredi in Alwar district are gearing up to host over 100 automotive and auto component manufacturing companies. The zone offers access to 57 per cent of the total automobile sales in the country. The state already boasts of leading players in the industry that include: Honda cars and two wheelers, Ashok Leyland, TAFE, Hero and Mahindra.
Though a land-locked state, its location on the Delhi Mumbai Industrial Corridor (DMIC) is a big advantage: 40 per cent of DMIC goes through Rajasthan. With land acquisition completed for the region, the dedicated freight corridor will become functional by 2017. What takes 4-5 days to reach Jawaharlal Nehru Port in Mumbai can now be covered within twenty hours!
Being the first state to amend the labour laws, Rajasthan facilitates easy entry and exit of industries.
Suresh K Poddar, CEO of Mayur Uniquoters Ltd, who has set up a plant in Rajasthan, his home state, for synthetic leather, pointed to having more than 700 workers with no union.
"With 324 developed industrial areas, the government has taken steps to form country specific zones," detailed Veenu Gupta, Principal Secretary and Managing Director, Rajasthan Industrial Investment Corporation. 1167 acres in Neermana has been earmarked as a Japanese zone. An additional Japanese zone has also been inaugurated recently. Similarly 250 acres has been allotted for a Korean investment zone.
The government has formulated the Rajasthan Investment Promotion Scheme, 2010 that provides investment subsidy and employment generation subsidy; upto 50 per cent exemption on VAT and CST for seven years. "We have customised packages for industries that invest more than Rs 500 crore or provide employment for more than 500. Companies can provide their wish list and we will evaluate and accept the proposals, if feasible," said Gupta.
Understanding the importance of public private partnerships (PPP), the government extends facilities for smooth co-ordination. "Till now 132 PPP projects worth Rs 91 billion have been completed and 50 more projects are being implemented," said Gupta.
S N Eisenhower, Director Operations, Saint Gobain Glass India pointed to the competitive, credible and committed government that was facilitative in setting up his company's Rs 1000 crore second world glass complex at Bhiwadi.
"Rajasthan, the largest state with a low population density, offers land in advance cheap for industry," said Minister Khimsar. The Minister welcomed investors to make use of the business-friendly policies of proactive government.


So you have decided where you want to go on holiday. Now what?
If you type "Villa in Tuscany" into a search engine and you will get about a quarter of a million results. It's hard to know where to start.
What do you want from your holiday?
Tuscany really does have something for everyone. If you enjoy sightseeing two weeks wouldn't be enough to see all the area has to offer; from The Leaning Tower of Pisa to lovely, laid back Lucca there really is no shortage of amazing architecture.
Perhaps you want to see some of the stunning countryside and villages, our particular favourite is the area around San Gimignano – it really is like stepping back in time.
Is wine is your thing? You might like to book a wine tasting day – there are plenty to choose from and planning in advance means you will not waste a moment when you arrive.
If you enjoy dining out you will want to make sure the villa you choose isn't too far from good restaurants. Many of the properties in Tuscany are in very rural locations making it more difficult to dine out.
For groups which include children you will want to know the villa is suitable. We believe no property with a pool can be considered entirely child friendly but there are some which are eminently more so than others.
We suggest booking through a reputable tour operator rather than direct with the owner (we would say that wouldn't we). It does make sense though. By booking with a licenced operator or by paying with your credit card you have financial protection in a way that simply can't happen if you book direct.
Don't be afraid to ask! Here at The Villa Agency we try to give as much information as we possibly can but there might be something specific to you and your family and friends. For example, perhaps you have an allergy to feathers so want to know what the pillows are filled with. You might only like to drink filter coffee so need to know there is a coffee making machine in the property. It is so much nicer to find everything out in advance so that there are no nasty surprises waiting for you.
We love it when people telephone us, so much more personal than only corresponding by email but we are happy to do that too.
We are delighted to tell you that we have massively increased our programme in some of the most prestigious resorts in The Algarve for next year.
Our clients love Quinta do Lago and Vale do Lobo and we do too.
At Quinta do Lago there are some fantastic restaurants offering top quality cuisine, The prestigious Quinta Shopping has a variety of designer shops and The Melting Pot Pub is a great place for people watching. The resorts are perfect for sports enthusiasts with tennis academy's, and championship golf courses.
We have several beautiful new villas in Quinta do Lago including the luxurious Millenium, a fabulous villa for eight people.
The Praca at Vale do Lobo has great restaurants and there is often live music in the summer months. We have some gorgeous new villas there, for example Number 017 which is in an unrivalled position with stunning views of the sea and beautiful beach.
If you would like any more information you can email us or speak to one of our reservations team.


text:
Home » Industry » Scheduling of medicines & poisons » Public notices about scheduling » Scheduling delegate's interim decisions & invitations for further comment » Interim decisions and invitation for further comment on substances referred to the June 2019 ACMS/ACCS meetings
Interim decisions and invitation for further comment on substances referred to the June 2019 ACMS/ACCS meetings
Print version of Interim decisions and invitation for further comment on substances referred to the June 2019 ACMS/ACCS meetings (pdf, 761 KB)
1.1. Interim decision in relation to phenpromethamine
1.2. Interim decision in relation to 1,4-Dimethylpentylamine (DMPA)
1.3. Interim decision in relation to sanguinarine
1.4. Interim decision in relation to finasteride
2.1. Interim decision in relation to lambda-cyhalothrin
2.2. Interim decision in relation to sarolaner
2.3. Interim decision in relation to broflanilide
2.4. Interim decision in relation to trifludimoxazin
2.5. Interim decision in relation to saflufenacil
3.1. Interim decision in relation to arbutin
Scheduling of chemicals and poisons
Book pagination
Interim decision on proposed amendment referred to the Advisory Committee on Medicines and Chemicals Scheduling in joint session (Joint ACCS/ACMS #22 June 2019)
Interim decision in relation to arbutin
Interim decision
Pursuant to regulation 42ZCZN of the Regulations, a Delegate of the Secretary has, in relation to the proposed amendment, made an interim decision to amend the current Poisons Standard in relation to arbutin as follows:
Schedule 4 - New Entry
ARBUTIN except in oral herbal preparations containing 500 mg or less of arbutin per recommended daily dose.
INDEX - Amend Entry
ARBUTIN
cross reference: HYDROQUINONE
cross reference: ARBUTIN, GLYCOSYLATED HYDROQUINONE, MONOBENZONE
Proposed date of effect of the proposed amendment
Reasons for the interim decision (including findings on material questions of fact)
In this section: Applicant's scheduling proposal and reasons for the proposal | Current scheduling status | Scheduling history | Australian regulations | International regulations | Substance summary | Summary of pre-meeting public submissions | Summary of Joint ACCS-ACMS advice/recommendations to the Delegate | Delegate's considerations | Reasons for the interim decision
Applicant's scheduling proposal and reasons for the proposal
An application to amend the Poisons Standard with respect to arbutin was considered.
The Applicant's proposed amendments to the Poisons Standard were:
ARBUTIN in preparations for human therapeutic or cosmetic use except:
when included in Schedule 2; or
in hair preparations containing 0.75 per cent; or
in cosmetic nail preparations containing 0.05 per cent; or
in oral herbal preparations containing 500mg or less of arbutin per recommended daily dose.
ARBUTIN in preparations for human external therapeutic or cosmetic use containing 5 per cent or less of arbutin except:
in cosmetic nail preparations containing 0.05 per cent.
Additional proposed amendment to the hydroquinone index entry as follows:
The Applicant's main points provided in support of the proposed amendments were as follows:
Commonplace and frequent population exposure to arbutin and hydroquinone via common dietary components at levels equal to likely levels arising from herbal exposure, combined with a lack of reports of adverse or toxic effects linked to naturally occurring arbutin, provides an established history of safety;
Available evidence shows that almost all hydroquinone released upon ingestion of arbutin is rapidly conjugated and eliminated with the urine;
Available evidence shows that the quantity of free, unconjugated hydroquinone released from arbutin in vivo is two orders of magnitude lower than the European Medicines Agency's (EMA) permitted daily exposure (PDE) level for hydroquinone; and
Naturally occurring arbutin in herbal medicines therefore does not present an unacceptable risk to human health.
Current scheduling status
Arbutin is not specifically scheduled in the Poisons Standard but has a cross reference to hydroquinone in the index of the Poisons Standard as follows:
Hydroquinone is listed in the Poisons Standard as follows:
HYDROQUINONE except:
when included in Schedule 2 or 4; or
in preparations containing 10 per cent or less of hydroquinone.
HYDROQUINONE (other than its alkyl ethers separately specified in this Schedule) in preparations for human therapeutic or cosmetic use except:
in hair preparations containing 0.3 per cent or less of hydroquinone; or
in cosmetic nail preparations containing 0.02 per cent or less of hydroquinone.
HYDROQUINONE (excluding monobenzone and alkyl ethers of hydroquinone included in Schedule 4) in preparations for human external therapeutic or cosmetic use containing 2 per cent or less of hydroquinone except:
Hydroquinone is also included in Appendix E and F as follows:
Appendix E, Part 2
First Aid Instructions
When included in Schedule 2 A (For advice, contact a Poisons Information Centre (e.g. phone Australia 13 11 26; New Zealand 0800 764 766) or a doctor (at once).)
When included in Schedule 4 or 6 A (For advice, contact a Poisons Information Centre (e.g. phone Australia 13 11 26; New Zealand 0800 764 766) or a doctor (at once), G2 (If swallowed, give activated charcoal if instructed. (Note - the words 'at once' to be added to instruction A), G3 (If swallowed, do NOT induce vomiting.), E2 (If in eyes, hold eyelids apart and flush the eye continuously with running water. Continue flushing until advised to stop by a Poisons Information Centre (e.g. phone Australia 13 11 26; New Zealand 0800 764 766) or a doctor, or for at least 15 minutes), R2 (If swallowed or inhaled, remove from contaminated area. Apply artificial respiration if not breathing. Do not give direct mouth-to-mouth resuscitation. To protect rescuer, use air-viva, oxy-viva or one-way mask. Resuscitate in a well-ventilated area), S1 (If skin or hair contact occurs, remove contaminated clothing and flush skin and hair with running water)
Appendix F, Part 3
Warning statements
When in Schedule 2 45 (WARNING - If a pigmented spot or mole has recently become darker, changed colour, become enlarged or itchy, or bleeds, do not use this product, see your doctor immediately. Do not use on children. Do not use near the eyes. Mild irritation may occur; stop use if it becomes severe. If fading is not evident in three months, seek doctor's advice)
except when in Schedule 2 or 4. - 1 (Avoid contact with eyes),4 (Avoid contact with skin)
Scheduling history
In 1969, hydroquinone was first included in Schedule 4 by the Poisons Schedule Sub-Committee (PSSC). This listing was due to concerns raised about the promotion and free availability of skin lightening creams which were being targeted to the PNG and Indigenous Australian populations.
In February 1971, the PSSC agreed to amend the Schedule 4 entry for hydroquinone to allow an exemption from scheduling for preparations of hydroquinone containing ≤2 per cent.
In May 1986, the Drugs and Poisons Schedule Committee (DPSC) considered deleting the ≤2 per cent exemption i.e. all human use hydroquinone and monobenzone becoming Schedule 4. The DPSC considered the overall Adverse Drug Reactions Advisory Committee (ADRAC) profile for hydroquinone and monobenzone and recommended that these substances warranted a Schedule 4 listing. However, this recommendation was not implemented.
In May 1987, the DPSC agreed to foreshadow creation of a new Schedule 2 entry for hydroquinone for human therapeutic or cosmetic use at ≤2 per cent (with an Appendix F Warning Statement). This was confirmed at the July 1987 Meeting.
In June 2008, the National Drugs and Poison Schedule Committee (NDPSC), following a request from the Over the Counter (OTC) Medicines Section of the TGA, gave consideration as to whether hydroquinone was appropriately scheduled. The NDPSC noted concerns about possible carcinogenicity of hydroquinone with prolonged usage.
In October 2008, the NDPSC foreshadowed consideration of the rescheduling of hydroquinone and possible up-scheduling hydroquinone in preparations for human external use (excluding hair dyes) to Schedule 3.
In August 2018, the TGA outlined changes that would be made to the Therapeutic Goods (Permissible Ingredients) Determination in June 2018. This included clarification of the Poisons Standard requirements for arbutin. As of 1 July 2018 ingredients known to contain arbutin will have arbutin listed as a mandatory component with associated specific requirements in line with the Poisons Standard. The affected ingredients include Achillea millefolium, Arctostaphylos uva-ursi (leaf), Chimaphila umbellate, Kalmia latifolia, Ledum palustre, Origanum majorana, Pyrus communis, Pyrus pyrifolia, Rhododendron ferrugineum, Turnera diffusa, Vaccinium vitis-idaea (leaf). The concentration of arbutin in the medicine must be no more than 25 mg/kg or 25mg /L or 0.0025 per cent unless used on the hair. This cut-off is based on the exemption in Part 1, Interpretation of the Poisons Standard, which states a scheduled substance (in Schedules 1 to 6 only) can be present at a concentration below 10 mg per litre or 10 mg per kg. The 25 mg/kg or 25mg /L or 0.0025 per cent cut-off for arbutin has been calculated based on the amount of hydroquinone converted into arbutin.
Hair preparations
In July 1987, the DPSC agreed to a general exemption from scheduling for ≤1 per cent hydroquinone in hair preparations.
In October 2008, the NDPSC noted that the European Union (EU) cut-offs for hydroquinone as an unapproved cosmetic ingredient (≤0.3 per cent in hair dyes) were more restrictive than the Poisons Standard controls (allowing ≤1 per cent).
In February 2009, the NDPSC considered a proposal to amend the exemption for use in hair dyes from 1 per cent to 0.3 per cent, in line with the European Union (EU) cut-offs. The NDPSC decided to amend the exemption for hair preparations containing hydroquinone from 1 per cent to 0.3 per cent or less.
Salts and derivatives
In May 1987, the DPSC noted that monobenzone was actually more potent than hydroquinone and agreed to foreshadow that it should be in Schedule 4, together with other derivatives of hydroquinone for human therapeutic or cosmetic use, with no exceptions (whereas hydroquinone had a Schedule 2 entry). The NDPSC also noted that the other ether derivatives of hydroquinone were more potent than hydroquinone and had a similar side effect level to monobenzone.
In July 1987, the DPSC amended the foreshadowed monobenzone entry by specifying capture of 'other alkyl ethers of hydroquinone for human therapeutic use or cosmetic use' rather than all derivatives. [No reason was recorded]. This remains the wording in the current monobenzone entry.
In February and June 2009, the NDPSC considered the scheduling of hydroquinone for therapeutic and cosmetic use. Both meetings supported deferring a decision on the scheduling of hydroquinone in skin bleaching products (for external therapeutic use) until the USFDA report was available. The Committee agreed that arbutin for cosmetic use should continue to be scheduled as a derivative of hydroquinone and that a cross reference with glycosylated hydroquinone in the Poisons Standard index be created.
Australian regulations
According to the TGA Ingredient Database:
Arbutin is not available for use as an active ingredient or excipient in any application. However, arbutin is available for use as an equivalent ingredient in export only and listed medicines.
Hydroquinone derivatives calculated as anhydrous arbutin are not available for use as an active ingredient or excipient in any application. However, it is available for use as equivalent ingredients in export only and over the counter medicines.
The following plant extracts are sources of arbutin and are available for use as follows:
Achillea millefolium: available for use as an active ingredient in export only, listed medicines, over the counter, and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in export only, listed medicines, over the counter, and prescription medicines. Not available as an equivalent ingredient in any application.
Arctostaphylos uva-ursi: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in export only, listed medicines, over the counter and prescription medicines. Not available as an equivalent ingredient in any application.
Kalmia latifolia: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
Ledum palustre: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
Origanum majorana: available for use as an active ingredient in export only, listed medicines, over the counter, and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
Pyrus communis: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in devices, export only, listed medicines, over the counter and prescription medicines. Not available as an equivalent ingredient in any application.
Pyrus pyrifolia: available for use as an active ingredient in listed medicines and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
Rhododendron ferrugineum: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
Turnera diffusa: available for use as an active ingredient in export only, listed medicines, over the counter and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in export only, listed medicines, over the counter and prescription medicines. Not available as an equivalent ingredient in any application.
Vaccinium vitis-idaea: available for use as an active ingredient in listed medicines and prescription medicines. Available for use as a homoeopathic ingredient in listed medicines. Available for use as an excipient ingredient in prescription medicines. Not available as an equivalent ingredient in any application.
As of 8 May 2019, there are no medicines currently active on the Australian Register of Therapeutic Goods (ARTG)[43] that contain arbutin as an active ingredient. However, the following plants, which are known sources or arbutin, are found on the ARTG as follows:
Achillea millefolium: 17 products;
Arctostaphylos uva-ursi: 21 products;
Kalmia latifolia: 2 products;
Ledum palustre: 3 products;
Origanum majorana: 12 products;
Pyrus communis: 4 products;
Turnera diffusa: 51 products; and
Vaccinium vitis-idaea: 1 product.
The following plant extracts which are sources of arbutin are permitted to be included in listed medicines according to the Therapeutic Goods (Permissible Ingredients) Determination No.2 of 2019[44] as follows:
333 Achillea millefolium A, E, H
Arbutin is a mandatory component of Achillea millefolium.
The concentration of arbutin in the medicine must be no more than 25 mg/kg or 25mg/L or 0.0025% unless used on the hair.
When for use on hair, the concentration of arbutin in the medicine must be no more than 0.74%.
646 Arctostaphylos uva-ursi A, E, H
Arbutin is a mandatory component of Arctostaphylos uva-ursi.
1314 Chimaphila umbellata A, H
Arbutin is a mandatory component of Chimaphila umbellata.
2826 Kalmia latifolia A, H
Arbutin is a mandatory component of Kalmia latifolia.
The concentration of arbutin in the medicine must be no more than 25 mg/kg or 25mg /L or 0.0025% unless used on the hair.
2946 Ledum palustre A, H
Arbutin is a mandatory component of Ledum palustre.
When the route of administration is other than topical, the maximum recommended daily dose must not contain more than 0.001 mg of the equivalent dry herbal material of Ledum palustre.
3575 Origanum majorana A, H
Arbutin is a mandatory component of Origanum majorana.
When the plant preparation is oil or distillate, the nominal capacity of the container must be no more than 50 millilitres.
When the concentration of Origanum majorana oil or distillate in the preparation is greater than 50%, a restricted flow insert must be fitted on the container and following warning statement is required on the medicine label:
(CHILD) 'Keep out of reach of children' (or words to that effect).
4204 Pyrus communis A, E, H
Arbutin is a mandatory component of Pyrus communis.
4205 Pyrus pyrifolia A, H
Arbutin is a mandatory component of Pyrus pyrifolia.
4284 Rhododendron ferrugineum A, H
Arbutin is a mandatory component of Rhododendron ferrugineum.
5022 Turnera diffusa A, E, H
Arbutin is a mandatory component of Turnera diffusa.
5070 Vaccinium vitis-idaea A, H
Arbutin is a mandatory component of Vaccinium vitis-idaea.
A = active ingredient, E = excipient, H = homoeopathic preparation ingredient
The European Chemicals Agency (ECHA) hazard classification for arbutin is, 'Warning! According to the classification provided by companies to ECHA in CLP notifications this substance causes serious eye irritation, causes skin irritation and may cause respiratory irritation'.
In 2018, the European Medicines Agency (EMA) Herbal Medicinal Products Committee (HMPC) concluded that on the basis of its long-standing use, bearberry leaf preparations (Arctostaphylos uva-ursi) can be used for treating symptoms of mild, recurrent infections in the lower urinary tract, such as a burning sensation when passing urine and/or frequently passing urine. The HMPC conclusions on the use of these bearberry leaf medicines for lower urinary tract infections are based on their 'traditional use'. This means that, although there is insufficient evidence from clinical trials, the effectiveness of these herbal medicines is plausible and there is evidence that they have been used safely in this way for at least 30 years (including at least 15 years within the EU). Moreover, the intended use does not require medical supervision. In its assessment, the HMPC considered laboratory studies which showed bearberry leaf preparations to have antibacterial action. No clinical studies are available with preparations containing only bearberry leaf.
European Scientific Cooperative on Phytotherapy (ESCOP) supports the use of Arctostaphylos uva-ursi for uncomplicated infections of the lower urinary tract, such as cystitis. The ESCOP monograph states that Arctostaphylos uva-ursi should contain a minimum of 7.0% anhydrous arbutin.
In the United States (US), the use of bearberry (extract of uva ursi) and bearberry fluidextract (extract of bearberry) as a 'menstrual/diuretic' is regulated under 21 CFR 310.545(a)(24); marketing of products for these uses requires an approved new drug application.
Substance summary
Table 1: Chemical information for arbutin
Molecular formula C12H16O7
Molecular weight 272.25 g/mol
CAS name β-D-Glucopyranoside, 4-hydroxyphenyl
CAS number 497-76-7
IUPAC and/or common and/or other names Arbutin, arbutoside, (2R,3S,4S,5R,6S)-2-Hydroxymethyl-6- (4-hydroxyphenoxy)oxane-3,4,5-triol (IUPAC), Hydroquinone 1-O-beta-D-glucopyranoside, Hydroquinone β-D-glucopyranoside, 4-hydroxyphenyl-beta-D-glucopyranoside
Hydroquinone 1-O-beta-D-glucopyranoside is the chemical identity of arbutin (Quintus 2005). The molecular weight is 272.25 g/mol (de Arriba 2013).
The three major metabolites of arbutin in vivo in order of decreasing concentration are hydroquinone glucuronide > hydroquinone sulfate > free hydroquinone (Schindler 2002).
Arbutin is a naturally occurring phenolic glycoside in many widely consumed food plants, including blueberry, cranberry (and other Vaccinium species), pear, bean, wheat, coffee, wine and broccoli (Deisinger 1996, Blaut 2006, Booth 2012). The amount of arbutin in a pear (12.7 mg) would be metabolised to hydroquinone in 1-4 hrs (Blaut 2006). A typical dietary consumption of arbutin rich foods of 2-3 cups of tea/coffee, plus 1 glass of red wine in a person of 60 kg would result in exposure of free hydroquinone from 0.66-4.5 mcg/kg bw/d to 9.3 mcg/kg bw/d (de Arriba 2013).
Summary of pre-meeting public submissions
Nine (9) submissions were received in response to the notice published under regulation 42ZCZK advising of the proposed amendment. Seven (7) were in support and two (2) opposed the proposed amendments (one (1) of which suggested further amendments).
The main points in support of the proposed amendments:
Arbutin is a constituent of a number of herbs, however the scheduling has particularly affected the supply of herbal preparations of bearberry (Arctostaphylus uva ursi) and Damiana (Turnera diffusa). These herbal preparations that contain arbutin have a long history of use by western herbal medicine practitioners in Australia without adverse effects. The un-scheduling of naturally occurring arbutin in herbal medicines does not present an unacceptable risk to human health.
Naturally occurring arbutin in herbal preparations for internal human therapeutic use should not require restriction via scheduling as they have not been shown to present an unacceptable risk to public health. Arbutin itself is now approved for use in cosmetic products in the EU, with listed functions including antioxidant, skin conditioning and skin lightening.
The NDPSC record of reason from 2009 stated '...that until more robust data was available regarding the actual risk of arbutin, then it remained appropriate to take a conservative approach and control arbutin under the current scheduling of hydroquinone as a derivative...'. Since the 2009 consideration, new data on the safety of arbutin when used in cosmetics has become available. The European Commission's Scientific Committee on Consumer Safety (SCCS) published two opinions relating to the substances α-arbutin and β-arbutin which came to the following conclusions:
The SCCS considers the use of α-arbutin safe for consumers in cosmetic products in a concentration up to 2% in face creams and up to 0.5 % in body lotions.
The SCCS considers the use of β-arbutin to be safe for consumers in cosmetic products in a concentration up to 7% in face creams provided that the contamination of hydroquinone in the cosmetic formulations remain below 1 ppm.[45] Therefore, the cosmetic use of arbutin can now be reconsidered to allow its use in line with the findings of the SCCS opinions as detailed above.
Pharmacists have noted that some arbutin-containing products carry claims that alpha-arbutin is 'much stronger in effect than arbutin or beta-arbutin'. As per the SCCS opinion on alpha and beta arbutin, the ACMS should consider whether different concentration limits need to be applied to the two arbutin derivatives if they are to be included in the Poisons Standard.
The proposed limit for oral herbal preparations of 500 mg or less of arbutin per recommended daily dose appears to be within acceptable range. However, it is also reported that traditional use of arbutin can only be recommended for females. The use of arbutin by men is only recommended when advised by a medical practitioner due to the risk of more severe infections (and not on the basis of traditional use). There is also reference to the recommended time of use being limited to two weeks.
Specific consideration is also warranted on whether different or additional controls should be applied for:
Different arbutin derivatives for external use;
The use of oral arbutin preparations for urinary tract infections in males; and
The recommended duration of use of oral arbutin preparations.
The individual listing of arbutin rather than the current arrangement of being captured as a derivative of hydroquinone, with a cross-reference to arbutin in the index will ensure that the requirements for products containing arbutin are clear and more easily identified.
The proposed upper limit of 500 mg of arbutin or less per daily recommended dosage is well within the EMA safe level of 840 mg per day as stated in their assessment report on Arctostaphylos uva-ursi.
Whilst arbutin can be hydrolysed to hydroquinone, pharmacokinetic data indicate that it is stable in gastric acid and only deglycosylated once in the liver, whereby the liberated hydroquinone is immediately conjugated to hydroquinone glucuronide and hydroquinone sulfate. Subsequent hydrolysis to hydroquinone only occurs at the point of excretion in the urine, providing the known urinary antimicrobial effect of herbal medicines such as Arctostaphylos uva-ursi.
The molar mass of arbutin is 272.243 g/mol compared to 110.112 g/mol for hydroquinone. Thus, from a toxicological perspective, arbutin and hydroquinone cannot be regarded as equivalent when consumed orally in the context of a herbal preparation
The main points in opposition of the proposed amendments:
The proposed Schedule 2 entry is unnecessarily restrictive in relation to human external therapeutic and cosmetic use products. In 2015, the SCCS published that they consider β-arbutin to be safe for consumers in cosmetic products in a concentration up to 7% in face creams provided the contamination of hydroquinone remains below 1 ppm. In 2015, the SCCS also published their opinion that α-arbutin is safe for consumers in cosmetic products in a concentration in face creams and up to 0.5% in body lotions.
Given the above, the following alternative wording was proposed in the public submission:
in oral herbal preparations containing 500 mg or less of arbutin per recommended daily dose; or
in preparations for human external therapeutic or cosmetic use for the face containing not more than 2 per cent; or
in preparations for human external therapeutic or cosmetic use for the body containing not more than 0.05 per cent.
ARBUTIN in preparations for human external therapeutic or cosmetic use (excluding hair preparations and cosmetic nail preparations) containing between more than 2 percent and not more than 5 percent of arbutin except:
in hair preparations containing 0.75 percent; or
in cosmetic nail preparations containing 0.05 percent; or
in preparations for human external therapeutic or cosmetic use for the face containing not more than 2 percent; or
in preparations for human external therapeutic or cosmetic use for the body containing not more than 0.05 percent.
As evidenced by the SCCS reports, topical arbutin at the proposed limits does not pose a risk of harm to public health.
Benefits of the proposed limit include permitting greater access by consumers. The ability of consumers to manage minor skin imperfections without posing a burden on the public purse through unnecessary medical consultations as well as relieve undue pressure on pharmacists so that they may concentrate on more appropriate health concerns.
The wording under this proposal is for topical application in human therapeutic or cosmetic goods. The LD50 value via the dermal route showed to be greater than 928 mg/kg bw (the technically applicable maximal dose). The tested animals showed no signs of harm for application via dermal route. It is expected this would likely be similar for humans.
One of the main issues with arbutin is the presence of hydroquinone, and there is no mention of any residue limits on hydroquinone. This should be added for clarity.
Summary of Joint ACCS-ACMS advice/recommendations to the Delegate
The Committee recommended that a new Schedule 4 entry be created for arbutin in the Poisons Standard as follows:
The Committee also recommended an amendment to the hydroquinone index entry as follows:
The Committee recommended an implementation date of 1 June 2020.
Members agreed that the relevant matters under Section 52E(1) of the Therapeutic Goods Act 1989 included: (a) risks and benefits of the use of a substance; (b) the purpose for which a substance is to be used and the and extent of use; (c) the toxicity of a substance; (e) the potential for abuse of a substance; and (f) any other matters that the Secretary considers necessary to protect public health.
The reasons for the advice included:
risks and benefits of the use of a substance:
Benefits relate mainly to traditional use. It is in many listed herbal medicines and herbal ingredients available for use to practitioners.
Risks:
Little risk as <0.6% excreted as free hydroquinone in urine.
In common foods and herbs with little toxic effects.
The risks of arbutin are associated with potential for hydrolysis to form free hydroquinone, which is regarded as having higher level of risk compared to arbutin.
the purpose for which a substance is to be used and the extent of use:
Arbutin is commonly found in foods and is a component of 11 herbal ingredients included in the TGA Permitted Ingredients Determination, which are available to sponsors to be included in products listed on the ARTG. There are many listed medicines containing these ingredients that have arbutin as a mandatory component.
Arctostaphylos uva-ursi, a major source of arbutin, has a history of traditional use in symptoms of cystitis. The TGA restricts indications for listed medicines to those in the Permitted Indications list. The other 10 herbal ingredients have a traditional use in a variety of other indications.
the toxicity of a substance:
Consistent with Schedule 4.
Toxicity concerns relate mainly to risks associated with conversion to hydroquinone.
the dosage, formulation, labelling, packaging and presentation of a substance:
the potential for abuse of a substance:
No evidence of abuse or misuse of the affected herbal medicines.
any other matters that the Secretary considers necessary to protect public health:
Use in men: For Arctostaphylos uva-ursi, community EMA monograph (2018) notes that clinical use in men is not recommended based on risk of complicated UTI in men above age 50 which may be due to benign prostatic hyperplasia and thus require the assessment by a medical practitioner. This may be helped by labelling.
Delegate's considerations
In making this interim decision, I have considered the following material:
The application to amend the current Poisons Standard with respect to arbutin;
Joint Meeting of the Advisory Committee on Chemicals Scheduling and the Advisory Committee on Medicines Scheduling's advice;
The public submissions received before the first closing date;
Section 52E of the Therapeutic Goods Act 1989 , in particular: (a) risks and benefits of the use of a substance; (b) the purpose for which a substance is to be used and the and extent of use; (c) the toxicity of a substance; (e) the potential for abuse of a substance; and (f) any other matters that the Secretary considers necessary to protect public health;
The Australian Health Ministers' Advisory Council's Scheduling Policy Framework (SPF 2018); and
The Australian Health Ministers' Advisory Council's Scheduling Handbook (V 1.0, January 2018).
Reasons for interim decision
I agree with the Committee's finding that the relevant matters of section 52E of the Therapeutic Goods Act 1989 are: (a) risks and benefits of the use of a substance; (b) the purpose for which a substance is to be used and the and extent of use; (c) the toxicity of a substance; (e) the potential for abuse of a substance; and (f) any other matters that the Secretary considers necessary to protect public health.
In my view, the relevant parts of the Scheduling Policy Framework (SPF) 2018 are the Scheduling Factors for Schedule 4.
I have made the decision to amend the current Poisons Standard to create a new Schedule 4 entry for arbutin and I have set out my reasons below.
I am of the view that arbutin and hydroquinone are separate substances of differing toxicity and molecular make up and as a result, should each have separate entries in the Poisons Standard. I agree with the data presented in the application that arbutin has a significant history of traditional use and is present in many food sources, as well as being a component of eleven herbal ingredients included in the TGA Permitted Ingredients Determination.
I have taken into consideration the toxicological data presented and I find that the proposed cut-off of 500 mg or less of arbutin per recommended daily dose as proposed by the Applicant to be acceptable. The amount of free hydroquinone following absorption of a 500 mg dose of arbutin would result in acceptable amounts of free hydroquinone in accordance with the cut-offs for hydroquinone in the Poisons Standard. I acknowledge that this cut off is well within the safe levels outlined by the European Scientific Cooperative on Phytotherapy (ESCOP), the European Medicines Agency (EMA) monograph and the British Pharmacopoeia (PB) monograph.
I find the Schedule 4 entry for arbutin appropriate, noting that any dosage of arbutin above the cut-off requires medical management by a general practitioner.
I have considered that the scheduling proposal provided limitations on the use of arbutin in cosmetic products and that these limits were a direct conversion of the hydroquinone cut-offs as set out in the Poisons Standard. Several public submissions suggested adopting the cut-offs outlined in the European (Scientific Committee on Consumer Safety) report. However, as the nature of the current scheduling application and associated toxicological data was in reference to the traditional use of arbutin in herbal preparations, I find that on balance, the topical use of arbutin should be considered in a separate consultation. This would allow for specific consideration of toxicity data on the dermal effects of arbutin.
I note that the current decision will affect the Permissible Ingredients Determination, which will require updating to the eleven herbs cross referenced in the list.
https://www.tga.gov.au/artg
https://www.legislation.gov.au/Series/F2019L00620
https://ec.europa.eu/health/scientific_committees/consumer_safety/docs/sccs_o_169.pdf
Category:Scheduling
Tags:ACMS, ACCS
URL:https://www.tga.gov.au/node/881802

redpajama_set_name: RedPajamaCommonCrawl


The internet provides new ways to stay connected and offers additional support to help you live independently in your own home.
You can use email, which can be used to contact people much quicker than the traditional postal service.
If you have family and friends who you do not get to visit often, you might want to consider using Skype which is a free phone service you can use on your computer. It works similar to a telephone with the added feature of being able to see the person you are talking to.
You can also shop online for a variety of things including food shopping. This is a great option for people who may find it difficult to get out and about or if you are not feeling at your best. Shopping online is also a great way to stay out of the cold weather in winter time.
If you are new to using IT, they are few things that you should do before starting out. First thing you should do is go over to our staying safe online page. You can also access computer courses from Hull adult education to help you build your confidence using IT.
All of our libraries have computers with internet access and Wi-Fi that are free for you to use.
My home helper is a tablet computer that has been specifically designed for people who struggle with modern technology. It helps to reduce anxiety and isolation and gives peace of mind, reassurance and confidence to family and carers.


text:
Did We Really Land on the Moon?
by Daniel Mallia
Published 12-19-11
Daniel Mallia is an HNN intern and a student at Fordham University.
One of the greatest American conspiracy theories suggests that Neil Armstrong's famous line "One small step for man, one giant leap for mankind" was, in fact, made from the comfort of a film studio.
The conspiracy centers around the July 20, 1969, moon landing—the landing of the first men on the moon at the height of the space race. To this day, many believe that the footage transmitted from that first landing was a forgery, nothing more than a Hollywood production made for prestige and propaganda purposes. And at that, the attempt was flawed in many ways, which allegedly reveals its forged nature. Yet as exciting as the idea of the United States pulling off the greatest publicity coup in the modern era may be, the theory is wrong—America really did land men on the moon.
The footage itself serves as evidence of the landing, in part because all of the points raised about its authenticity have been proven wrong by logical explanations. One famous argument for the video being a forgery points to the absence of stars from the recordings as a clear sign. But the simple explanation behind this point lies with the difficulty of capturing the up-close and very bright astronauts and moon surface, and the distant and dim stars, in the same film shot. (Of course, the exposure would have been set so as to properly capture the first two!)
Another famous accusation discusses the apparent waving of the flag that the astronauts planted on the moon, which seems suggestive of a breeze on a movie set. However, the flag was not waving in the air, as it would on Earth, but rather it rippled into that position when the astronauts only partially extended the rod and unfurled the flag, thus giving it the appearance of continuing waving.
The glaring truth that pervades this issue as well as several other points is that if NASA really did fake the moon landing, one would have expected them to have put in a little more time, effort and money (which they would have saved from not actually going to the moon) into correcting these seemingly amateurish mistakes. (Not to mention the fact that the Soviets would have loved to expose the moon landings as a fraud, and Russian intelligence would no doubt have investigated these mistakes thoroughly.)
Furthermore, there are the several surviving astronauts, Neil Armstrong and Buzz Aldrin included, who went to the moon (Aldrin actually punched a moon landing conspiracy theorist in the face for calling him a liar). But for those who will not accept anything less than physical evidence, there are always the moon rocks themselves. An examination of the moon rocks will reveal that they are devoid of the water and minerals typically found in Earth rocks, covered with small impact craters from meteoroids, and filled with isotopes created by interaction with cosmic radiation. Either the moon rocks are genuine, or NASA and the countless, some foreign, independent institutes which have examined and displayed loaned moon rocks, are cooperating in a massive conspiracy.
While the notion that America did not land men on the moon may be an interesting theory to entertain, the simple fact is that the evidence weighs very heavily against it.


The Lord Jesus Christ was humble, meek and good, and with the help of the Lord we too can be humble. Fasting and prayer are the means by which God can change our hearts, but we must approach both with humility and purpose. Saying our prayers quickly just to get through them is no prayer at all. Fasting, likewise, must be done as an offering to God and with a commitment to restore our soul to it's original state. True repentance is the beginning of life and leads to communion with God. The restoration of our true self can only be done with God's help, for without Him we can do nothing.
From my personal observations, I have come to believe that Orthodoxy, if it is to thrive into the next century, must adhere to the ancient traditions and roots of the faith that have set her apart from the religions. The Church must proclaim the Good News of Christ in all its purity, so that the mystical and sacramental core of her very being be clearly seen by a world that so needs this ancient, unchanging faith. The world must see by our differences that Orthodoxy offers the transformational healing that comes through the life of Christ's Church. By clinging to her ancient, God inspired Tradition, the Church takes seriously the mystical and sacramental roots of her divinely founded self.
"Kupyatich" Icon (1180) of the Most Holy Theotokos.
6 Let as many bondservants as are under the yoke count their own masters worthy of all honor, so that the name of God and Hisdoctrine may not be blasphemed. 2 And those who have believing masters, let them not despise them because they are brethren, but rather serve them because those who are benefited are believers and beloved. Teach and exhort these things.
6 Now godliness with contentment is great gain. 7 For we brought nothing into this world, [e]and it is certain we can carry nothing out. 8 And having food and clothing, with these we shall be content. 9 But those who desire to be rich fall into temptation and a snare, and into many foolish and harmful lusts which drown men in destruction and perdition. 10 For the love of money is a root of all kinds ofevil, for which some have strayed from the faith in their greediness, and pierced themselves through with many sorrows.
With respect, Father, may I paraphrase your statement as follows: "If the Church is to thrive at all, it must adhere to the living God by embracing and emulating our Lord Jesus Christ." I would willingly discard many traditions of Christendom to gain in exchange a Church whose members are consistently truly indistinguishable from Jesus.
God's peace to you and your brothers as we prepare to remember Christ's nativity.


text:
Orioles Nominate Trey Mancini For 2021 Roberto Clemente Award
September 15, 2021 by CBS Baltimore Leave a Comment
BALTIMORE (WJZ) — Trey Mancini is the Baltimore Orioles' nominee for the Roberto Clemente Award, an honor for players who exhibit character, sportsmanship and philanthropy, the team announced on Tuesday.
The first baseman has worked as an ambassador for the the Colorectal Cancer Alliance following his recovery from stage III colon cancer and serves on the organization's "Never Too Young" advisory board, the team said.
Mancini was first diagnosed with cancer in spring training 2020 and missed the pandemic-shortened season as he recovered from surgery to remove a malignant tumor from his colon and endured six months of chemotherapy treatment.
The team also cited Mancini's friendship Mo Gaba, a Baltimore sports superfan who went through four different battles with cancer before dying in July 2020. Mancini visited with Gaba, took him out for activities, brought him to Orioles games, and bought food and clothes for the Gaba family, the team said.
The Trey Mancini Foundation has also partnered with the Frederick branch of Blessings in a Backpack to provide weekend means for elementary school-aged children who face food insecurity, according to the team.
On the season, Mancini is batting .261 with 21 home runs and 66 RBI. On June 20, he became the fastest Oriole in team history to reach 100 career home runs.
During the All-Star break, Mancini finished second to New York Mets first baseman Pete Alonso in the Home Run Derby.
Roberto Clemente Day, named for the famed Pirates outfielder and humanitarian, is scheduled for Sept. 15, when the Orioles host the New York Yankees. Between Sept. 15 and Oct. 3, fans can vote for the overall winner of the Roberto Clemente Award at mlb.com/clemente21.
Filed Under: Orioles


Terry Marecki is chair of the Committee on Public Services and serves on the committees on Health and Human Services and Ways and Means.
She also serves on the Special Committee on the Criminal Justice Center.
A Republican, she was first elected in November 2014 to represent the Wayne County Commission's 9th District, which covers the city of Northville, Northville Township and most of the city of Livonia.
The lifelong Livonia resident graduated from Bentley High School and Madonna University with a bachelor of science degree in dietetics. She is a registered dietitian who worked at the University of Cincinnati and University of Michigan medical centers in the cardiac surgery and rehabilitation departments.
Marecki served on the Livonia Public Schools Board of Education, including as vice president and secretary, from 2001-03. She served on the Livonia City Council from 2004-10, including the final two years as vice president, and as Livonia city clerk from 2010 -14.
She has volunteered for years in her hometown and is active with the Livonia Community Foundation, Livonia Prayer Breakfast Committee, Community Opportunity Center Advisory Board, the Livonia Public Schools Education Foundation, as an honorary board member, and as a trustee on the Madonna University Committee on Planning and Mission Effectiveness. Her family attends Oak Pointe Church in Novi.
Marecki and her husband, Mark, have four children and two grandchildren.
Representing: Northville, Northville Township, & Livonia (part).
Commissioner Terry Marecki has published her office budget report for November 2018.
Commissioner Terry Marecki represents the 9th District which covers, Northville, Northville Township and most of Livonia.
Commissioner Terry Marecki's budget transparency as of June 1, 2018.
Join Commissioner Marecki at her monthly office hours to discuss Wayne County issues.
District 9 office budget, as of September 30, 2017.
Commissioner Terry Marecki represents the 9th District, which covers Northville, Northville Township and most of Livonia.
District 9 office budget, as of March 8, 2016.
Wayne County Commissioner Terry Marecki, R-Livonia, will be part of the Commission's newly created Special Committee on Accountability & Transparency.
District 9 office budget as of Sept. 30, 2015 - the end of the 2014-15 fiscal year.
Two goals were accomplished when the Wayne County Commission voted 15-0 Oct. 1 to approve a two-year intergovernmental agreement with Northville Township.
As a way to reach out to the public, the Wayne County Commission's Committee on Ways and Means will hold a budget hearing at 10 a.m. Sept. 1 at Livonia City Hall, 33000 Civic Center Drive.


text:
Q: Sending email with Javamail via imap The convention with using JavaMail seems to be:
-- Use smtp for sending emails
-- Use imap (or pop) for reading emails ..
For our applications purposes, I reckon it is more useful to use an email client protocol (imap specifically) to send emails .. and ensure copies of all sent mail make into the 'Sent' folder of gmail or whatever mail account used.
Note, the primary point of the email connection is just to send mails, not to read or poll emails.
Would like opinions/suggestions/examples from others who have used imap for sending emails from their java apps.  All posts appreciated.

A: Simple answer: It is not possible to send emails with IMAP. You have to use SMTP for sending emails.
More precisely there are some extensions to combine sending and retrieval operations. However, as far as I know, these extensions are not widely spread - neither on the client nor on the server side.
See also the article on wikipedia about IMAP (IMAP#Disadvantages):

Unlike some proprietary protocols which combine sending and retrieval operations, sending a message and saving a copy in a server-side folder with a base-level IMAP client requires transmitting the message content twice, once to SMTP for delivery and a second time to IMAP to store in a sent mail folder. This is remedied by a set of extensions ...

redpajama_set_name: RedPajamaStackExchange


text:
Q: Is It Possible To Move An Admin Menu Node? We're using Fishpig's Attribute Splash module which inserts a node "Splash" at the top level of the admin menu.  We'd prefer it to live under the Catalog menu though.  Here's the original XML the module uses to insert the menu node (in adminhtml.xml):
 <menu>
    <attributeSplash translate="title" module="attributeSplash">
        <title>Splash</title>
        <sort_order>31</sort_order>
        <children>
            <pages translate="title">
                <title>Manage Pages</title>
                <action>attributeSplash_admin/adminhtml_page</action>
                <sort_order>11</sort_order>
            </pages>
            <groups translate="title">
                <title>Manage Groups</title>
                <action>attributeSplash_admin/adminhtml_group</action>
                <sort_order>6</sort_order>
            </groups>
        </children>
    </attributeSplash>
</menu>

I've created a separate module with the following in it's adminhtml.xml.  This disables the original menu node and creates a new one with the same children under the catalog menu:
<menu>
    <!-- Disable default menu node -->
    <attributeSplash>
        <disabled>1</disabled>
    </attributeSplash>
    <!-- Create replacement -->
    <catalog>
        <children>
            <attribute_splash translate="title" module="attributeSplash">
                <title>Attribute Splash (Brands)</title>
                <sort_order>100</sort_order>
                <children>
                    <pages translate="title">
                        <title>Manage Pages</title>
                        <action>attributeSplash_admin/adminhtml_page</action>
                    </pages>
                    <groups translate="title">
                        <title>Manage Groups</title>
                        <action>attributeSplash_admin/adminhtml_group</action>
                    </groups>
                </children>
            </attribute_splash>
        </children>
    </catalog>
</menu>
<!-- Access control nodes so non-administrators can be given access -->
<acl>
    <resources>
        <admin>
            <children>
                <catalog>
                    <children>
                        <attribute_splash translate="title" module="attributeSplash">
                            <title>Attribute Splash (Brands)</title>
                            <sort_order>100</sort_order>
                            <children>
                                <pages translate="title">
                                    <title>Manage Pages</title>
                                </pages>
                                <groups translate="title">
                                    <title>Manage Groups</title>
                                </groups>
                            </children>
                        </attribute_splash>
                    </children>
                </catalog>
            </children>
        </admin>
    </resources>
</acl>

This will work fine for now, but if the Fishpig Attribute Splash module is updated with different menu nodes I'll need to make sure to change this xml to match.  What I'm wondering if if anyone knows of a cleaner solution.  Is there a way to simply move a menu node rather than disabling it and creating a new one?  I wouldn't be too surprised if there isn't, but if there is I'd like to know about it since it would be slightly more upgrade proof.

A: As far as I know this is the cleanest and best solution to do so. I've tried it in different ways but it all requires 'hardcoded' values at some level.
Just a small tip, when you change the placement of the menu item you should check for the _isAllowed method in the adminhtml controller. There's probably a line of code like
return Mage::getSingleton('admin/session')->isAllowed('admin/attributesplash');

that will have to be changed to
 return Mage::getSingleton('admin/session')->isAllowed('admin/catalog/attributesplash');

to allow users who are not super admins to access it.

A: No, I don't believe there's a way to move the menu node in a way other than disabling and recreating it.  I've used this technique myself a handful of times.
Edit: Actually, one way that you could do a move would be to overload Mage_Adminhtml_Block_Page_Menu::getMenuArray() and modify the contents of the menu array after it's constructed from the underlying XML.
I don't think this is a very clean solution, but it is an option.  If you did that, you would have to manually modify the level parameter for the menu node as well as it's children once you moved it.

A: To complete @Sander Mangel answer you should also check the _setActiveMenu in the controller and also some block files.
Some times you can display or hide some buttons (save / edit / delete) depending on the permissions.
So check in /Blocks/Adminhtml/ Grid, Edit, Form, Tabs, ...


text:
MEDIA. NEWS, EVENTS, & EVERYTHING ELSE GOING ON AT BENZTOWN.
BENZTOWN LAUNCHES BEHIND THE SONG
LOS ANGELES, CA, AUGUST 31, 2016— Benztown, a global leader in radio imaging, voiceover, programming and jingles, announces that it has launched "Behind the Song", a new series of 30-second audio documentaries that give radio listeners a comprehensive look at the stories behind the biggest songs of all time. The series kicks off with Classic Rock's Top 20, now available through Benztown/Westwood One's Avalanche Imaging Library. Each category will be updated weekly moving forward, for a complete library of stories behind the top 100 songs in Classic Rock.
The "Behind the Song" stories are intertwined with the music and roll right into the song itself, giving listeners a continued look into their favorite music and giving stations turnkey content directly related to the core artists of the station. Benztown will roll out the first installment of the "Behind the Song" 30-second audio documentary series for Country formats in a few weeks.
Justin Case, Director of Programming and Imaging, Benztown, said: "The stories behind the biggest classic rock songs of all time are almost as good as the songs themselves. Avalanche takes its already stellar production value up a notch with imaging director James Stodd and writer Bill Royal serving up weekly "Behind the Song" stories that will add brand value to your station, while keeping the music moving and the stories forever young."
Listen to a demo of the "Behind the Song" audio documentary series for Classic Rock here:
Behind The Songs - Composite_0
For more information about the "Behind the Song" series and Benztown's imaging libraries, contact Masa Patterson at (818) 842-4600 or at mp@benztown.com.
previous blog post
DAWSON MCALLISTER LIVE SETS RECORD FOR SUICIDE PREVENTIONS
INC 5000 FOR FOURTH CONSECUTIVE YEAR
Get back to the main blog page


Scary Spice Mel B has said she plans to visit an exhibition on the Spice Girls which has attracted a record number of visitors to Leeds City Museum.
More than 5,400 people have visited the exhibition, which opened on 28 January.
Spice Girl Mel B contacted the collections owner on Twitter, tweeting: "I will make a point of taking a trip to you to see it all for myself."
The museum said the best-attended exhibition prior to this was Dr Rock's Lost Gallery with 3,500 visitors.
Mel B, who is from Leeds but lives in Los Angeles, also responded to messages about the exhibition from visitors saying: "Thank you for all your amazing pics from the Leeds Spice exhibition".
The 4,000 items on show at Spiceworld: The Exhibition are owned by collector Liz West and include outfits worn by the band, accessories and the Union Jack boots worn by Geri Halliwell .
Ms West said: "I am absolutely delighted that so many people have taken an interest in coming to the exhibition.
"Obviously it would be amazing if Mel B came along to see it for herself - the offer of a full tour is always open."


When you are on the job, which do you value more: power or versatility? If you answered "both," then take a look at the KM 131 R KombiMotor. This multi-tasking tool is the most powerful in the STIHL KombiSystem family and features a low-emission engine, delivering 30% longer run times compared to previous models. It's compatible with over a dozen KombiSystem attachments, giving you incredible utility in a fraction of the trailer space compared to stand-alone tools. The KM 131 R is also easy to operate, featuring a semi-automatic choke lever, one-touch stop switch, anti-vibration system and a specially designed quick-release coupling system for easy switching between attachments. The only thing easier than using the KM 131 R is leaving your older, bulkier power tools behind. NOTE: STIHL KombiMotors and STIHL KombiSystem attachments sold separately.


Thanksgiving desserts can be tough. You want a show-stopper that you can make ahead and will serve a crowd, while sticking to a warming fall theme (AND one that looks amazing on your Thanksgiving table). Cue this gingerbread cheesecake. It's so easy to make but looks so impressive, your guests might not believe you made it!
Prepare it the night before and you've got Thanksgiving dessert sorted (check out these awesome Thanksgiving games for added fun too!). Oh, and you may find that this recipe makes a tablespoon or two more than you need. That was totally on purpose, so the "cook" can try out the cheesecake without serving it up with a missing wedge (trust us, this is so good you HAVE to test it before letting everyone else dig in). Can't get enough of ginger? Try this boozy gingerbread cake too!
Place the gingersnap cookies in a large sandwich bag and crush into crumbs using a rolling pin.
Transfer to a bowl and mix with the melted butter. Spoon the biscuit mixture into a 9-inch round baking tin that has been lined with a circle of baking parchment on the bottom. Press the mixture into the base and up the sides of the tin. It's easier to use a measuring cup and spoon to press the mixture into the corners of the tin and to flatten the rim of the cheesecake crust. Place in the refrigerator to firm up while you prepare the rest of the cheesecake.
Make the caramelized pecans next. Place a piece of non-stick baking parchment on a baking tray ready for cooling the nuts. Place the butter and sugar in a medium-sized skillet and heat over a medium-to-high heat until the butter has half melted. Add the pecans and stir together. Continue to heat for 4-5 minutes, stirring every minute until the sugar has melted and is coating the pecans. Turn off the heat and carefully transfer the pecans to the prepared baking parchment. Quickly and carefully spread out using a spatula, so the pecans can cool (they'll be very hot). Leave to cool for 10-15 minutes, then break apart.
Next, make the cheesecake mix. Whisk the cream in a large bowl until soft peaks form. Add the cream cheese and whisk again to combine. Add the confectioners' sugar, vanilla extract, nutmeg, ginger and cinnamon. Whisk again to combine.
Take the cheesecake crust out of the refrigerator. Spoon in the cheesecake mixture and flatten with a spatula. Sprinkle on the caramelized pecans. Refrigerate for at least 30 minutes until the crust is firm.
Once the crust is firm, remove the cheesecake from the tin, carefully remove the parchment lining and drizzle on the caramel sauce. Serve with extra caramel sauce!
Transfer to a bowl and mix with the melted butter. Spoon the biscuit mixture into a nine-inch round baking tin that has been lined with a circle of baking parchment on the bottom. Press the mixture into the base and up the sides of the tin. It's easier to use a measuring cup and spoon to press the mixture into the corners of the tin and to flatten the rim of the cheesecake crust. Place in the refrigerator to firm up while you prepare the rest of the cheesecake.
Are you making anything new and different for Thanksgiving? We'd love to see your photos — tag us on Instagram using #iamcreative, and be sure to check out our Pinterest for more yummy recipes.


text:
Bloklugthart.com
OVERBRUGGEN – BRIDGE SCULPTURE HOORN
The new residential district in the town of Hoorn consists of nine "islands" connected to each other by nine special bridges. Visual artists Maree Blok and Bas Lugthart were commissioned by the municipality of Hoorn to design for one of these bridges the monumental artwork 'Overbruggen'. The giant sculpture is cut out of solid steel and consists of a large human figure supporting himself with both hands and feet on the abutments on both sides of the water, thus spanning the entire width of the canal. The 'bridging' of the water and the connection between the two banks of the canal is visualized by the giant man sculpture.
On the opposite side the letters of the word OVERBRUGGEN (bridging) form the railing of the bridge.
Copyright © 2023 · Public Art


text:
Anthony Muiru
MD MPH
Dr. Anthony Muiru is a nephrologist who cares for patients with kidney disease.
Muiru's research seeks to illuminate racial disparities in the incidence of end-stage kidney disease, which African Americans are three to four times more likely to develop than their white counterparts. He focuses on understanding risk factors for chronic kidney disease among people of African ancestry, including African Americans and individuals living in sub-Saharan Africa. Causes of this disparity include genetic susceptibilities that arose in sub-Saharan Africa, such as the presence of certain gene variations.
One of Muiru's goals is to study these genetic risk factors among individuals living in sub-Saharan Africa. He and his team believe that understanding kidney disease heredity in the source population could yield valuable insights into mechanisms of the disease among all people of African ancestry. This could also help policymakers formulate public health priorities and management tools for patient care, with the goal of lessening the incidence and severity of kidney diseases in these settings.
Muiru earned his medical degree from Harvard Medical School and his master's degree in public health at the Harvard T.H. Chan School of Public Health. He completed a residency in internal medicine at Massachusetts General Hospital and a fellowship in nephrology at UCSF.
Muiru is a member of the American Society of Nephrology, National Kidney Foundation, Network of Minority Health Research Investigators, Renal Physicians Association and International AIDS Society.
Muiru was born and raised in rural Kenya. In his free time, he enjoys travel and running outdoors.
Harvard T.H. Chan School of Public Health, MPH, 2016
Harvard Medical School, 2012
Massachusetts General Hospital, Internal Medicine, 2016
UCSF, Nephrology, 2018
Conditions I specialize in
Acute kidney failure
Electrolyte disorders
Lupus nephritis
Polycystic kidney disease, autosomal dominant
Renal vascular disease
Nephrology and Hypertension Faculty Practice
400 Parnassus Ave., B1 Plaza Level
M-F, 8 a.m. - 4:30 p.m.
Dr. Muiru's is a warm and engaging doctor. he is a good listener always sensitive to my worries and concerns. he is thoughtful in his responses.
The epidemiology of chronic kidney disease (CKD) in rural East Africa: A population-based study.
Tenofovir disoproxil fumarate initiation and changes in urinary biomarker concentrations among HIV-infected men and women.
AIDS (London, England)
Kidney disease risk factors associate with urine biomarkers concentrations in HIV-positive persons; a cross-sectional study.
Christopher Carlos
Kerry Cho
Stephen Gluck
Chi-yuan Hsu
MD, MS, FACP
Raymond Hsu
Vasantha Jotwani
Elaine Ku
Lowell Lo
Anna Malkina
Ian McCoy
Meyeon Park
Leticia Rolon
Anoop Sheshadri
Laalasa Varanasi


Korea's Byeong Hun An came out on top in the long drive contest at the U.S. PGA Championship, much to the irritation of Rory McIlroy.
Jordan Spieth and Adam Scott went in opposite directions at the Australian Open while Matt Jones used a home-course advantage to shoot a 3-under 68 and take a 3-stroke lead after 36 holes.
Andrew Dodt opened a 3-shot lead at the Mauritius Open after putting together a solid 2-under 70 in the second round on Friday.
David Drysdale and James Heath both came through playoffs to advance to the quarterfinals of the inaugural Belgian Knockout.
Louis Oosthuizen shot a 7-under 65 during a bogey-free first round to share the lead with Pablo Larrazabal the Qatar Masters.


The first reading is a fascinating one from a fascinating book in the New Testament. Hebrews has had a variety of names. The original King James Bible called it "The Epistle of Paul the Apostle to the Hebrews" indicating a guess that it was written by Paul, but that seems likely wrong.
Even the bit we read here is not in Paul's style. We know it simply as the Epistle to the Hebrews and its authorship is much debated and it is considered anonymous by most scholars now.
Probably it was written for Jewish Christians living in Jerusalem in the first or second century to help them hold up against persecution and to prevent them from losing faith in the teaching that Jesus was the Messiah. It had been a common belief that the Messiah would come as a military leader, and the notion that Jesus could have come in such a humble way was hard to accept.
Even the reading we see reflects an effort to mediate between the "Old Testament God" (often seen as smiting down enemies and such) and the God of the New Testament, to whom Jesus is our mediator. The first part of the reading begins by calling the word of God a "two-edged sword" but then ends with the comforting words that Jesus sympathizes with our temptation to sin.
Not being a trained theologian, I don't claim any credentials in trying to work all of this out. Like most of you, I try to take from the readings something that I can apply in my own life and hopefully do better. Here's the part that speaks to me: Jesus sympathizes with our weaknesses. It's sort of like teaching one of your kids to ride a bike. They fall off a bunch before they learn to ride. Then they can ride. But that doesn't mean they never fall off again. But they get back up and ride.
Not many people would learn to ride a bike if they only gave it one try. Similarly, we wouldn't lead very good lives if we gave up after our first sin and decided that it wasn't worth trying to avoid more after that. Jesus wants us to ride the bike. He's running behind us just like our parents did yelling "keep pedaling!" And when we fall off — as we always do — he'll help us put bandaids on the scrapes and encourage us to get back on.